【发布时间】:2021-12-26 01:37:24
【问题描述】:
syntax-rules 在 Scheme 中是“卫生的”和“引用透明的”,并且必须保留 Scheme 的词法范围。据我了解,这意味着在宏扩展阶段,扩展器需要了解lambda 和define。
- 扩展器需要知道
lambda。 假设我们有这样的代码:
如果扩展器不知道(define x 1) ((lambda (x) x) 2)lambda特殊形式,它会认为(lambda (x) x)中的两个xs 绑定到(define x 1)中的x,这是不正确的。 - 扩展器需要知道
define,以便知道特定标识符的定义位置(即在哪个范围内)。另外,假设我们有这样的代码:
为了正确判断(define n 1) (define f (lambda (x y) (+ x y))) (define lambda f) (lambda n n)(lambda n n)中的n都引用(define n 1),扩展器必须明白(define lambda f)已经改变了lambda的含义(因此扩展器必须停止使用特殊规则来处理lmabda在这个范围内)。
宏扩展器还需要了解哪些其他特殊形式?它需要知道set!吗?
【问题讨论】:
标签: scheme syntax-rules