例如,我想定义一个这样的函数:
(defun operation (op)
(op 3 7))
但是lisp编译器抱怨这样的代码:(operation +)
有没有办法将算术运算符作为函数参数传递?
答案 0 :(得分:4)
有两类Lisp方言:Lisp-1和Lisp-2。 Lisp-1意味着函数和变量共享一个命名空间。 Scheme是一个Lisp-1。 Lisp-2意味着函数和变量具有不同的命名空间。 Common Lisp是一个Lisp-2。如果要将名为a
的函数作为参数传递给另一个函数,则必须将其称为#'a
。如果您将函数存储在变量中,则可以使用apply
函数来执行它。如果代码被重写,你的代码应该可以工作:
(defun operation (op)
(apply op '(3 7)))
(operation #'+)