3

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

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

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

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

4

1 回答 1

5

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 #'+)
于 2013-09-27T15:46:28.110 回答