在Common Lisp中使用构造的(非顶级)函数

时间:2019-02-11 22:40:13

标签: function lambda common-lisp

我不确定使用未在顶层定义的函数的最佳方法。

我创建了一个列表,称为*lambdas*,是从用户的输入规范派生的主力lambda表达式。还有一个*args*列表为每个lambda提供适当的参数。我想将每个lambda转换为一个函数,对其进行编译,将其应用于各自的参数,然后收集结果。

目前,我正在做(setf (symbol-value *dummy-fn-name*) (compile nil lambda))作为暂存每个函数的临时场所,随后是(apply (symbol-value *dummy-fn-name*) args)以获取每个结果,但是这很可能是骇客。是否有使用lambda的更直接的方法?对这些功能进行apply编辑后,无需再挂断。

1 个答案:

答案 0 :(得分:2)

如果只是暂时的,则无需将其放入全局变量中:

(let ((func (compile nil lambda)))
  (apply func args))

或者简单地

(apply (compile nil lambda) args)