2

マップであるファイルを読み取る関数内に次のコードがあります。*numrows*寸法が正しくないというエラーが表示されます。これは、lisp がこれらの変数を並行して処理しているためだと思います。どうすればこれを修正できますか?

(setq *numrows* (read map))
(setq *numcols* (read map))
(setq *map* (make-array '(*numrows* *numcols*) :initial-element nil))
4

1 に答える 1

7

あなたは問題を誤診しています。MAKE-ARRAY に渡す最初の引数は、*NUMROWS* と *NUMCOLS* の 2 つのシンボルのリストです。ただし、MAKE-ARRAY の最初の引数は、負でない整数のリストにする必要があります。例を修正する最も簡単な方法は、代わりにを含むリストを作成することです: (list *numrows* *numcols*)。したがって、コードは次のようになります。

(setq *numrows* (read map))
(setq *numcols* (read map))
(setq *map* (make-array (list *numrows* *numcols*) :initial-element nil))

ただし、通常、このように setq を使用することはありません。コンテキストによっては、これらの変数を LET* でバインドする方がよいでしょう。

(let* ((numrows (read map))
       (numcols (read map))
       (map-array (make-array (list numrows numcols) :initial-element nil))
  ; do something with map-array
  )
于 2010-10-04T00:03:41.890 に答える