gpt4 book ai didi

syntax-error - 无法识别基本的LISP功能

转载 作者:行者123 更新时间:2023-12-03 08:13:28 25 4
gpt4 key购买 nike

我正在使用Lisp(通用Lisp)(一种我不熟悉的语言)实现俄罗斯方块游戏,但遇到了一个错误,但我并不真正理解它为什么会发生。

(defun tabuleiro-remove-linha! (tabuleiro linha)
(let ((coluna 0))
(if (equal linha 17)
((loop while (<= coluna 9) do(setf (aref tabuleiro linha coluna) nil)))
((loop while (<= coluna 9) do((setf (aref tabuleiro linha coluna) (aref tabuleiro (+ linha 1) coluna)))
(tabuleiro-remove-linha! tabuleiro (+ linha 1)))))))

它显示:
TABULEIRO-REMOVE-LINHA! in lines 51..56 : Not the name of a function:
(LOOP WHILE (<= COLUNA 9) DO (SETF (AREF TABULEIRO LINHA COLUNA) NIL))
If you continue (by typing 'continue'): Ignore the error and proceed

有什么线索吗?我已经搜索过,并且两者都循环存在,而存在于CLISP中。我的CLISP是2.49。提前致谢。

最佳答案

因此,如果您有一个像+这样的函数,并在圆括号中加上一些像(+ 2 3) lisp这样的操作数,则会将运算符+23用作参数。

在您的代码中,您具有:

((loop while (<= coluna 9) do(setf (aref tabuleiro linha coluna) nil)))

这意味着操作数是 (loop while (<= coluna 9) do(setf (aref tabuleiro linha coluna) nil)),并且您没有参数。 Common Lisp指出,这既不是像 +这样的符号,也不是像 (lambda (x) (+ x x))这样的匿名函数。因此, (loop while (<= coluna 9) do(setf (aref tabuleiro linha coluna) nil))是无效的函数。

可能发生的情况是您使用括号作为装饰,但这与在使用C系列语言的语句后加上多余的括号相同。例如。 floor(5)()具有相同的效果。

像使用C族语言中的{curlies}一样,将块中的分组进行分组是通过Common Lisp中的 (progn ...)完成的。最后要评估的表达式是“返回”
(loop while (<= coluna 9) do(setf (aref tabuleiro linha coluna) nil))与以下内容相同:
while( coluna <= 9 )
tabuleiro[linha][coluna] = null;

因此,当您删除多余的括号时,由于 colunalinha永不更改,因此会留下多个无限循环。 loop确实像 (loop :for var :from 3 :to 10 :collect var) ; ==> (3 4 5 6 7 8 9 10)一样支持迭代

关于syntax-error - 无法识别基本的LISP功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33510628/

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