jos*_*osh 5 macros scheme syntax-rules
我知道这syntax-rules是一个卫生的宏观系统,但我不明白为什么会发生这种情况:
(define not (lambda (x) x))
(define-syntax nand
(syntax-rules ()
((_ a b)
(not (and a b)))))
(nand #f #t)
==> #f
Run Code Online (Sandbox Code Playgroud)
现在,如果我not 在定义宏后重新定义,则(nand #f #t)返回#t. 为什么,如果宏观系统应该是卫生的?
宏在定义宏时存在的环境中展开,而不是在调用宏时存在的环境中展开。这与卫生无关,这是宏引入的变量与程序中其他地方存在的其他同名变量不同的属性。
| 归档时间: |
|
| 查看次数: |
144 次 |
| 最近记录: |