關於衛生宏觀兩個關於球拍宏觀
的問題,我並不完全瞭解衛生宏觀調控工作。這裏有兩個例子。
第一個是:
#lang racket
(define-syntax (g stx)
(syntax-case stx()
([_ arg]
#'(display arg))))
(let ([display 1])
(g 3))
這工作得很好,但是這一個:
#lang racket
(define-syntax (g stx)
(syntax-case stx()
([_ arg]
#'(display arg))))
(define display 1)
(g 3)
將引發異常。如何解釋這兩種情況的區別?
如何定義這樣
我希望定義一個宏,以允許在球拍匿名遞歸函數的宏。 這一次不會起作用,因爲易復發不模塊中定義的:
#lang racket
(define Z
(λ(recur)
((λ(x) (recur (λ(y) (x x) y)))
(λ(x) (recur (λ(y) (x x) y))))))
(define-syntax-rule (R proc)
(Z (λ(recur) proc)))
((R (λ(n)
(if [= n 1]
1
(* n (recur (- n 1)))))) 3)
如何實現這一目標?
這個問題會更好,如果它被分成了兩個不同的問題,每個問題都是獨立的。 – chwarr