我知道syntax-rules是一个卫生的宏系统,但我不明白为什么会这样:
(define not (lambda (x) x))
(define-syntax nand
(syntax-rules ()
((_ a b)
(not (and a b)))))
(nand #f #t)
==> #f现在,如果在定义了宏之后重新定义了not,那么(nand #f #t)将返回#t。为什么,如果宏观系统应该是卫生的?
发布于 2012-01-19 16:42:41
宏在定义宏时存在的环境中展开,而不是在调用宏时存在的环境中展开。这与卫生无关,即宏引入的变量与程序中存在的具有相同名称的其他变量不同的属性。
https://stackoverflow.com/questions/8927937
复制相似问题