例如,我想定义一个这样的函数:
(defun operation (op)
(op 3 7))
Run Code Online (Sandbox Code Playgroud)
但是 lisp 编译器会抱怨这样的代码: (operation +)
有没有办法将算术运算符作为函数参数传递?
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 #'+)
Run Code Online (Sandbox Code Playgroud)