定义也可用来定义过程:
(define (f x) (+ x 42))
(f 23)
==>65
一个过程是一个表达式,在对象上面的一个简单抽象。例如,上面的 define 定义了一个名为 f
的过程(注意 f
x
两边的括号,它指明了这是一个过程定义)。表达式 (f 23)
是一个过程调用,意为,“在 x
绑定到 23
的情况下计算 (+ x 42)
”。
由于过程是对象,它们可以作为参数传给其它过程:
(define (f x) (+ x 42))
(define (g p x) (p x))
(g f 23)
==> 65
在这个例子中,g
的躯体部分计算过程中将 p
绑定到 f
,同时将 x
绑定到 23
,它等同于计算 (f 23)
,结果为 65
。
事实上,Scheme 很多预定义的操作符不是通过句法而是通过变量绑定的形式实现的。如 +
这个操作符,在 Scheme 中只是一个普通的标识符,它被绑定到一个对数对象进行求和的过程上,同样的 *
等运算符也是这样:
(define (h op x y) (op x y))
(h + 23 42)
==>65
(h * 23 42)
==>966
过程定义不是创建过程的唯一方法。一个 lambda 表达式会创建一个新的匿名过程对象:
((lambda (x) (+ x 42)) 23)
==>65
上面的表达式为一个过程调用;(lambda (x) (+ x 42))
被求值得到一个接受一个参数的过程,该过程接受一个数参数,返回该参数加上42
的值。