Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 在公共Lisp中调用函数列表_Clojure_Common Lisp_Lisp 2 - Fatal编程技术网

Clojure 在公共Lisp中调用函数列表

Clojure 在公共Lisp中调用函数列表,clojure,common-lisp,lisp-2,Clojure,Common Lisp,Lisp 2,在Clojure中,我可以定义一系列函数,然后像调用任何其他值一样调用它们,如下所示: (doseq[op[+-*/]] (普林顿(作品1234)) 将生成以下输出: 10 -8 24 1/24 nil 尝试在Common Lisp中执行相同操作只会导致错误: (dolist(op'(+-*/) (印刷品(作品1234)) ;in:DOLIST(OP'(+-*/) (LET((OP(really-THE(MEMBER/*-+)(CAR#:N-LIST671))) (SETQ#:N-LIS

在Clojure中,我可以定义一系列函数,然后像调用任何其他值一样调用它们,如下所示:

(doseq[op[+-*/]]
(普林顿(作品1234))
将生成以下输出:

10
-8
24
1/24
nil
尝试在Common Lisp中执行相同操作只会导致错误:

(dolist(op'(+-*/)
(印刷品(作品1234))
;in:DOLIST(OP'(+-*/)
(LET((OP(really-THE(MEMBER/*-+)(CAR#:N-LIST671)))
(SETQ#:N-LIST671(CDR#:N-LIST671))
(印刷体(作品1234)))
; 
;警告:
;定义了变量OP,但从未使用过。
;in:DOLIST(OP'(+-*/)
(作品1234)
; 
;警告:
;未定义的函数:OP
; 
;编译单元已完成
;未定义的功能:
;OP
;捕捉到2种类型的警告条件
在未定义的函数上调用调试器:
函数COMMON-LISP-USER::OP未定义。
键入“帮助”以获取调试器帮助,或键入(SB-EXT:EXIT)以退出SBCL。
重新启动(可通过数字或可能的缩写名称调用):
0:[中止]退出调试器,返回顶层。
(“未定义函数”)
作为
#op
调用
op
对我来说也不起作用


那么在CL中有没有这样做的方法?

因为函数的名称空间和数据的名称空间在LISP-2中是分开的(因此在公共LISP中也是分开的),所以在将函数作为参数传递时需要使用
funcall

(dolist (op '(+ - * /)) 
   (print (funcall op 1 2 3 4))))
funcall
函数大致相当于Clojure的
apply
,将
op
函数应用于提供的参数。在这种情况下,还有一件事要做,因为
op
是绑定到函数的符号,但是
funcall
会处理这个问题。

请看一看