Scheme编程:从变量定义到递归与映射的全面解析
1. 未定义变量与过程定义顺序
在Scheme中,系统在lambda表达式里遇到未定义变量时,不会立即报错,直到该过程被实际调用。例如:
(define proc1
(lambda (x y)
(proc2 y x)))
这里 proc2 未定义,但定义 proc1 时系统不会报错。若在定义 proc2 之前调用 proc1 ,则会出错。我们可以给 proc2 一个顶层定义并测试 proc1 :
(define proc2 cons)
(proc1 'a 'b)
; 输出 (b . a)
这意味着我们可以按任意顺序定义过程,这在组织过程定义文件以提高程序可读性时非常有用,尤其在顶层定义的两个过程相互依赖的情况下。
2. 练习题
练习2.6.1 :给定 double-any 的定义,若输入 (double-any double-any double-any) 会发生什么?
练习2.6.2 :定义 compose