5

我知道这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. 为什么,如果宏观系统应该是卫生的?

4

1 回答 1

5

宏在定义宏时存在的环境中展开,而不是在调用宏时存在的环境中。这与卫生无关,卫生是宏引入的变量与程序中其他地方存在的其他同名变量不同的属性。

于 2012-01-19T16:42:41.330 回答