Lisp:尝试使用ACON和循环生成a列表时出现应用错误

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

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

函数定义有问题,缺少(空)参数列表:

(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*))))