如何在LISP中将算术运算符作为函数参数传递?

时间:2013-09-27 15:32:29

标签: lisp common-lisp

例如,我想定义一个这样的函数:

(defun operation (op)
  (op 3 7))

但是lisp编译器抱怨这样的代码:(operation +)

有没有办法将算术运算符作为函数参数传递?

1 个答案:

答案 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 #'+)