Common Lisp:函数 A 将函数传递给 B,B 将其传递给调用函数的 C
Common Lisp: function A passes a function to B which passes it to C which invokes the function
下面的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.
为什么?
我该如何解决?
(C #'fn)
这将查找一个名为 fn
的函数,该函数由 defun
、labels
、flet
等创建。您有一个包含函数的变量,因此您应该将它转发到 C
而不是查找它的名称:
(defun B (fn)
(C fn))
; ^^ no #'
啊,我才发现我方法的错误
函数 A
正在将 helloworld
函数传递给 B
:
(defun A ()
(B #'helloworld))
所以B
有的功能所以B
不需要用#'
(或function
)来获取函数。因此,B
只需要将函数传递给 C
:
(defun B (fn)
(C fn))
同样,C 有函数,所以它只需要调用函数:
(defun C (fn)
(funcall fn))
塔达!行得通!
下面的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.
为什么?
我该如何解决?
(C #'fn)
这将查找一个名为 fn
的函数,该函数由 defun
、labels
、flet
等创建。您有一个包含函数的变量,因此您应该将它转发到 C
而不是查找它的名称:
(defun B (fn)
(C fn))
; ^^ no #'
啊,我才发现我方法的错误
函数 A
正在将 helloworld
函数传递给 B
:
(defun A ()
(B #'helloworld))
所以B
有的功能所以B
不需要用#'
(或function
)来获取函数。因此,B
只需要将函数传递给 C
:
(defun B (fn)
(C fn))
同样,C 有函数,所以它只需要调用函数:
(defun C (fn)
(funcall fn))
塔达!行得通!