Lisp Scheme Part19
■ このスレッドは過去ログ倉庫に格納されています
0575デフォルトの名無しさん
2008/02/15(金) 14:10:32(define x 100)
(define y 1000)
(define-syntax foo (syntax-rules () ((foo y) (+ x y))))
;パターン(foo y)に現れていなくてテンプレート(+ x y)に現れている識別子は+とx
;さらに自由識別子だから
;+とxは挿入された場所の字句的束縛ではなく
;マクロ定義された場所の字句的束縛を持つ
;yはマクロに於ける仮引数だからマクロ使用の式の値になる
(let ((x 10))
(foo y))
-> 1100
(let ((x 10))
(foo x))
-> 110
(let ((y 1))
(foo x))
-> 200
(let ((y 1))
(foo y))
-> 101
(let ((+ -))
(foo 10000))
-> 10100
■ このスレッドは過去ログ倉庫に格納されています