gpt4 book ai didi

lisp - 普通口齿不清 : Beginner's trouble with funcall

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

我正在尝试将一个函数作为参数传递并在另一个函数中调用该函数。

我的一段代码如下所示:

(defun getmove(strategy player board printflag)
(setq move (funcall strategy player board))
(if printflag
(printboard board))

策略作为符号传递,在二维列表中表示为诸如“randomstrategy”之类的东西

我一直收到错误:"FUNCALL: 'RANDOMSSTRATEGY 不是函数名称;请尝试使用符号代替...

当我将 strategy 替换为 'randomstrategy 时,它工作正常。我也可以独立调用randomstrategy。有什么问题?

最佳答案

问题是变量 strategy 不包含符号 randomstrategy 而是 list (!) 'randomstrategy(这是 (quote randomstrategy) 的简写符号)。

现在,您可以,当然,通过函数 second 从列表中提取符号,但这只会掩盖真正的问题,即可能在调用链的某个地方。尝试确定为什么传递给函数 getmove 的参数是 'randomstrategy,而不是应有的 randomstrategy。 (也许您在引用列表中错误地使用了引号?)

哦,不要让自己对 (funcall 'randomstrategy ...) 起作用的事实感到困惑:毕竟表达式 'randomstrategy 不起作用, 对其自身求值,但对符号 randomstrategy 求值。

关于lisp - 普通口齿不清 : Beginner's trouble with funcall,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1626567/

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