gpt4 book ai didi

function - Common Lisp 中的 FUNCALL 和 #'function-name 有什么区别?

转载 作者:行者123 更新时间:2023-12-02 22:16:39 26 4
gpt4 key购买 nike

我正在阅读一本做作业的书,我明白使用#'是将变量视为函数而不是变量。但我对FUNCALL有点模糊。我知道 lisp 从变量中生成对象,所以函数名只是一个“指针”(可能是一个坏词,但希望你明白我的意思),在这种情况下你使用 #' 来调用它,或者是 funcall调用它们的唯一方法?例如。

(defun plot (fn min max step)
(loop for i from min to max by step do
(loop repeat (funcall fn i) do (format t "*"))
(format t "~%")))

我不能这样做:

(defun plot (fn min max step)
(loop for i from min to max by step do
(loop repeat #'(fn i) do (format t "*"))
(format t "~%")))

我想我的困惑在于函数名称到底是什么。当我读这本书时,它说变量的值就是函数对象。

最佳答案

#'函数名称(函数函数名称)。没有调用任何内容,评估与function-name(表示函数的对象)关联的函数中的任何一个结果。 funcall 用于调用函数。

参见funcallfunctionHyperSpec .

使用两者的示例 session :

CL-USER> (defun square (x) (* x x))
SQUARE
CL-USER> #'square
#<FUNCTION SQUARE>
CL-USER> (function square)
#<FUNCTION SQUARE>
CL-USER> (funcall #'square 3)
9
CL-USER> (funcall 'square 3)
9

第二次调用 funcall 有效,因为它还接受一个符号作为函数指示符(有关详细信息,请参阅上面的 funcall 链接)。

关于function - Common Lisp 中的 FUNCALL 和 #'function-name 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9613376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com