如何在LISP中将算术运算符作为函数参数传递?
例如,我想定义这样一个函数:如何在LISP中将算术运算符作为函数参数传递?,lisp,common-lisp,Lisp,Common Lisp,例如,我想定义这样一个函数: (defun operation (op) (op 3 7)) (defun operation (op) (apply op '(3 7))) (operation #'+) 但是lisp编译器抱怨这样的代码:(操作+ 有没有办法将算术运算符作为函数参数传递?有两类Lisp方言:Lisp-1和Lisp-2。Lisp-1意味着函数和变量共享一个名称空间。Scheme是一个Lisp-1。Lisp-2意味着函数和变量具有不同的名称空间。公共Lisp是一个L
(defun operation (op)
(op 3 7))
(defun operation (op)
(apply op '(3 7)))
(operation #'+)
但是lisp编译器抱怨这样的代码:(操作+
有没有办法将算术运算符作为函数参数传递?有两类Lisp方言:Lisp-1和Lisp-2。Lisp-1意味着函数和变量共享一个名称空间。Scheme是一个Lisp-1。Lisp-2意味着函数和变量具有不同的名称空间。公共Lisp是一个Lisp-2。如果要将名为
a
的函数作为参数传递给另一个函数,则必须将其称为#a
。如果变量中存储了函数,则可以使用apply
函数执行该函数。如果将代码重写为以下格式,则代码应该可以工作:
(defun operation (op)
(op 3 7))
(defun operation (op)
(apply op '(3 7)))
(operation #'+)
还有一个
funcall
函数类似于apply
,但是参数被扩展而不是收集到列表中,因此(apply op'(3 7))
也可以写成(funcall op 3 7)
。有关何时使用的更多信息,请参阅(这实际上不是一个很好的重复,但更好的答案将是这个问题的一个好答案。)