gpt4 book ai didi

lisp - 普通口齿不清, "defined but never used"

转载 作者:太空宇宙 更新时间:2023-11-03 18:44:18 25 4
gpt4 key购买 nike

此函数编译时出现警告,fn 在第一行中已定义且从未使用过,并且 fn 在第二行中是未定义的函数:

(defun test-function (fn)
(funcall #'fn))

为什么?一般解释或指向它的链接会很好。

PD:完整日志:

test.lisp:9:1:                                                                             
style-warning:
The variable FN is defined but never used.
--> PROGN SB-IMPL::%DEFUN SB-IMPL::%DEFUN SB-INT:NAMED-LAMBDA
==>
#'(SB-INT:NAMED-LAMBDA TEST-FUNCTION
(FN)
(BLOCK TEST-FUNCTION (FUNCALL #'FN)))


test.lisp:10:3:
style-warning:
undefined function: FN
==>
(SB-C::%FUNCALL #'FN)

最佳答案

如果您想调用作为参数传递的函数,或分配给变量的函数,只需将变量或参数用作 funcall 的第一个参数:

(defun test-function(fn)
(funcall fn))

(test-function #'+)
;; => 0

符号 #'X(function X) 的缩写,(参见 manual),其中 X 必须是函数的名称,例如使用defunlabelsflet 或lambda 表达式定义的名称。因此,#'fn 不起作用,因为 fn 不是函数的名称,而是变量(在本例中为参数)。

Common-Lisp 是一个 Lisp-2 ,即函数的命名空间不同于其他变量的命名空间。因此,函数的名称是特殊的,因为您可以直接在表单中调用它们,而如果将函数分配给变量,则必须使用 (funcall name-of-the-variable arguments )

关于lisp - 普通口齿不清, "defined but never used",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39691566/

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