我尝试在 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*
是一个列表。
我可以在这里看到两个问题。
- 您缺少参数列表,因此将
LOOP
形式用作参数列表。它恰好包含一个点对(X . Y)
,这是不允许的。
- 当您可能想要一对包含
X
的(整数)值 和是
。
试试这个:
(defun gen-world ()
(loop for x to *hight*
do (loop for y to *width*
do (acons `(,x . ,y) '(rock) *world*))))
我是一名优秀的程序员,十分优秀!