私はマクロ let-- (ラムダを使用する let* のようなもの) を Guile に持っています:
(define (let-make-lambdas pairs body)
(if (null? pairs)
`((lambda () ,@body))
`((lambda (,(caar pairs))
,(let-make-lambdas (cdr pairs) body))
,(cadar pairs))))
(define-macro (let-- pairs . body)
(let-make-lambdas pairs body))
外部関数を使用してコード生成を行うと正常に動作しますが、以下のコード ( with は単なるマクロ) は動作しません:
(define-macro (let-- pairs . body)
(if (null? pairs)
`((lambda () ,@body))
`((lambda (,(caar pairs))
,(let-- (cdr pairs) body))
,(cadar pairs))))
なぜ?