マップであるファイルを読み取る関数内に次のコードがあります。*numrows*
寸法が正しくないというエラーが表示されます。これは、lisp がこれらの変数を並行して処理しているためだと思います。どうすればこれを修正できますか?
(setq *numrows* (read map))
(setq *numcols* (read map))
(setq *map* (make-array '(*numrows* *numcols*) :initial-element nil))
マップであるファイルを読み取る関数内に次のコードがあります。*numrows*
寸法が正しくないというエラーが表示されます。これは、lisp がこれらの変数を並行して処理しているためだと思います。どうすればこれを修正できますか?
(setq *numrows* (read map))
(setq *numcols* (read map))
(setq *map* (make-array '(*numrows* *numcols*) :initial-element nil))
あなたは問題を誤診しています。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
)