以下helloworld
函数只输出Hello,world
(defun helloworld ()
(format t "Hello, world"))
我创建了一个将A
传递给函数helloworld
的函数B
:
(defun A ()
(B #'helloworld))
函数B
然后将函数传递给函数C:
(defun B (fn)
(C #'fn))
函数C
然后调用该函数(即,它调用helloworld
):
(defun C (fn)
(funcall fn))
当我运行程序时:
(A)
我收到此错误消息:
Error in FUNCTION [or a callee]: The function FN is undefined.
为什么?
我该如何解决?
答案 0 :(得分:7)
(C #'fn)
这会查找使用fn
,defun
,labels
等内容创建的名为flet
的函数。您有一个包含函数的变量,所以您应该只是将其转发到C
而不是查找其名称:
(defun B (fn)
(C fn))
; ^^ no #'
答案 1 :(得分:3)
函数A
正在将helloworld
函数传递给B
:
(defun A ()
(B #'helloworld))
因此B
已该功能,因此B
无需使用#'
(或function
)获取< / em>这个功能。因此,B
只需将函数传递给C
:
(defun B (fn)
(C fn))
同样,C 有函数,所以它只需要调用函数:
(defun C (fn)
(funcall fn))
TADA!那很有效!