我正在学习球拍(类似Lisp的计划),并且我试图做类似(apply + '(1 2))
但没有使用apply
,我失败了。我几乎可以肯定的是,apply
可以用eval
以某种方式模拟,但现在我有疑惑。是否可以使用`eval`在Lisp中实现`apply`?
所以,我的问题是:可以在Racket(或其他Lisp)中使用eval
和其他基本操作来实现apply
?也就是说,如何使这项工作:
{ define [my-apply f arg]
;; what does go here?
}
(my-apply + (list 1 2)) ; => 3
当然可以。提示:诀窍是将functor和arg列表传递给'eval'而不用自己评估列表,所以你需要使用'(list ...)'和'(quote ...)'。 – 2013-03-21 14:42:17
如果'arg'引用词法范围变量,是否有解决方案? – finnw 2013-03-21 15:45:36
你必须考虑的是eval调用适用。因此,如果您通过调用eval来定义my-apply,然后调用eval,那么您是否确实在不使用apply的情况下定义了my-apply? – WuHoUnited 2013-03-21 15:54:09