我将如何做一个define-syntax-rule
接受一个列表作为参数和一个列表(或引用,如果它是一个元素)作为 lambda 的主体?我想做类似的事情:
>(define a (lambdarize '(x y z) '(+ x y z)))
#<procedure>
>(a 1 2 3)
6
>(define b (lambdarize '(x) 'x))
#<procedure>
>(b 1)
1
我玩过define-syntax-rule
and apply
,但由于lambda
它本身似乎是一个宏而不是一个过程,我一直很难找到它......
哦...我想要一个不使用的解决方案eval
,因为它是有害的...
更新
谢谢你的回答,瑞恩......几乎做到了!=) eval 的问题在于它不擅长捕捉当前范围......这样我可以做类似的事情
(let ([a 1])
(begin
(defmethod add ((x integer?) (y integer?)) (+ x y a))
(add 1 2)
)
eval 会惨遭失败……这只是一个学术例子,但我认为这是对正确性的一个很好的测试。