Lisp:尝试使用ACON和循环生成a列表时出现应用错误
我尝试在clisp中运行以下代码:Lisp:尝试使用ACON和循环生成a列表时出现应用错误,lisp,common-lisp,Lisp,Common Lisp,我尝试在clisp中运行以下代码: (defun gen-world (loop for x to *hight* do (loop for y to *width* do (acons '(x . y) '(rock) *world*)))) 并获取以下错误: *** - APPLY: argument list given to SYSTEM::ERROR-OF-TYPE is dotted (terminated by "Invalid speciali
(defun gen-world
(loop for x to *hight*
do (loop for y to *width*
do (acons '(x . y) '(rock) *world*))))
并获取以下错误:
*** - APPLY: argument list given to SYSTEM::ERROR-OF-TYPE is dotted
(terminated by
"Invalid specialized parameter in method lambda list
(LOOP FOR X TO *HIGHT* DO
(LOOP FOR Y TO *WIDTH* DO (ACONS '(X . Y) '(ROCK) *WORLD*))): (LOOP FOR Y IN
*WIDTH* DO (ACONS '(X . Y) '(ROCK) *WORLD*))"
)
当我跑的时候
(acons '(x . y) '(rock) *world*)
我没有错误
为什么会发生这种情况?编辑:
*hight*
*width*
和*world*
是全局的,并且在范围内<代码>*world*是一个列表。函数定义有问题,缺少(空)参数列表:
(defun gen-world () <body>)
以列表结束表达式:
(acons '(x . y) '(rock) (list *world*))
并确保变量
*hight*
[sic]、*width*
和*world*
都在范围内我可以在这里看到两个问题
循环
表单作为参数列表。它恰好包含一个点对(X.Y)
,这是不允许的X
和Y
的(整)值时,您的密钥是一个常量(X.Y)
(defun gen-world ()
(loop for x to *hight*
do (loop for y to *width*
do (acons `(,x . ,y) '(rock) *world*))))
当我运行
(acons'(x.y)-(rock)*world*)
时,我没有遇到任何问题,它生成的正是我想要的。@lonjil另外,在gen world
之后加上一个()
,表示这是一个没有代码的过程定义arguments@lonjil如果这解决了你的问题,请不要忘记通过点击左边的复选标记来接受答案,而且ACONS没有副作用。这样循环就没用了。我现在觉得很尴尬,但是谢谢你的帮助。
(defun gen-world ()
(loop for x to *hight*
do (loop for y to *width*
do (acons `(,x . ,y) '(rock) *world*))))