Procedure is Data

Procedures

在编译器接收到procesure的表头时,会判断是属于哪种过程,例如,在读取到cons后,会将之后输入的数据作为参数进入过程。特殊的过程如begin、dispaly。

局部变量

lambda procedure接受紧跟着它的第一个变量作为参数,传递多个参数可以采用列表的形式传递。

1
2
3
(define area
(lambda (length breadth)
(* length breadth)))

Apply

apply允许直接传递一个list给procedure来完成批量操作
例如

1
2
3
(define x '(1 2 3))
(apply + x)
; ==> 6

apply首先接受一个过程,然后接受不定长度的参数,但最后一个参数一定是list,将这个list与所有的其他参数一起执行这个过程。

顺序执行

很多Scheme procedure都隐含了begin语句

1
2
3
4
5
6
7
8
9
(define display3 
(lambda (arg1 arg2 arg3)
(begin
(display arg1)
(display " ")
(display arg2)
(display " ")
(display arg3)
(newline))))