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 に答える