3

我尝试在 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*是一个列表。

4

2 回答 2

4

我可以在这里看到两个问题。

  1. 您缺少参数列表,因此将LOOP表单用作参数列表。它恰好包含一个(X . Y)不允许的点对。
  2. '(X . Y)当您可能想要一对包含 和 的(整数)时,X您的密钥是一个常量Y

试试这个:

(defun gen-world ()
    (loop for x to *hight*
        do (loop for y to *width*
            do (acons `(,x . ,y) '(rock) *world*))))
于 2012-12-12T15:11:17.300 回答
1

您的函数定义存在问题,您缺少(空)参数列表:

(defun gen-world () <body>)

同样在这一行:

(acons '(x . y) '(rock) *world*)

以列表结束表达式:

(acons '(x . y) '(rock) (list *world*))

并确保变量*hight*[原文如此]*width**world*在范围内

于 2012-12-12T13:45:01.847 回答