我尝试在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 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*
是一个列表。
答案 0 :(得分:4)
我可以在这看到两个问题。
LOOP
表单作为参数列表。它恰好包含一个不允许的点对(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*))))
答案 1 :(得分:1)
您的功能定义存在问题,您缺少(空)参数列表:
(defun gen-world () <body>)
同样在这一行:
(acons '(x . y) '(rock) *world*)
使用列表结束表达式:
(acons '(x . y) '(rock) (list *world*))
确保变量*hight*
[sic],*width*
和*world*
在范围内