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

ここに2つの問題があります。

  1. 引数リストが欠落しているため、LOOP代わりにフォームが引数リストとして使用されます。(X . Y)そして、それは許可されていない点線のペアを含んでいます。
  2. との(整数)'(X . Y)含むペアが必要な場合、キーは定数です。XY

これを試して:

(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 に答える