3
나는 syntax-rules
는 위생 매크로 시스템 이해하지만 이런 일이 발생하는 이유는 이해가 안 :구문 규칙이 완전히 위생적이지 않은가?
(define not (lambda (x) x))
(define-syntax nand
(syntax-rules()
((_ a b)
(not (and a b)))))
(nand #f #t)
==> #f
자, 매크로, 다음 (nand #f #t)
반환 #t
을 정의 후 not
를 재정의 한 경우. 왜 매크로 시스템이 위생적이라면?
이 질문은 또한 최상위 환경에 관한 질문으로 이어지고 있습니다. 예를 들어, Racket에서는 'not'의 정의가 모든 모듈의 범위에 있으므로 #f를 얻을 수 있습니다. @ user448810처럼, 이것은 위생에 관한 질문이 아닙니다. –
@ user448810 - "이것은 위생과는 아무런 관련이 없습니다"- 완전히 정확하지는 않습니다. 실제로, 참조 투명성 (이는 질문에서 실제로 요구되는 것임)은 일반적으로 위생적 매크로의 속성이라고합니다. 참조 : http://community.schemewiki.org/?scheme-faq-macros –