4、Scheme编程:从变量定义到递归与映射的全面解析

bas365 admin 2025-11-03 17:17:48 阅读 6280

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

相关文章