【发布时间】:2017-09-06 20:37:48
【问题描述】:
以下代码有效:
(define foo (lambda (x)
(lambda (y) (+ x y))))
((foo 2) 5) ; => 7
但是,如果我想编写一个为我定义一个带有任意数量参数的 lambda 的宏,就像这样:
(define-syntax create-lambda
(syntax-rules ()
((_ name args)
(define name (lambda args
(lambda (y) (+ x y)))))))
并像这样使用它:
;; create the lambda named "foo" with arguments "(x)"
(create-lambda foo (x))
((foo 2) 5) ; => Unbound variable: x
我收到一个未绑定的变量错误。
我知道 x 没有定义,因为它包含在我的宏中的 args 中。
但是如果我显示我的宏的结果,我会得到:
(define foo (lambda (x) (lambda (y) (+ x y))))
这在我看来完全有效。
为什么将 lambda 参数定义为单个变量 args 会阻止我绑定里面的内容?
【问题讨论】: