我正在閱讀一個地圖文件中的函數內有以下代碼。我收到一個錯誤*numrows*
是一個非法的維度。我認爲這是因爲lisp正在並行處理這些變量。我怎樣才能解決這個問題?如何在常見的Lisp中依次創建變量?
(setq *numrows* (read map))
(setq *numcols* (read map))
(setq *map* (make-array '(*numrows* *numcols*) :initial-element nil))
我正在閱讀一個地圖文件中的函數內有以下代碼。我收到一個錯誤*numrows*
是一個非法的維度。我認爲這是因爲lisp正在並行處理這些變量。我怎樣才能解決這個問題?如何在常見的Lisp中依次創建變量?
(setq *numrows* (read map))
(setq *numcols* (read map))
(setq *map* (make-array '(*numrows* *numcols*) :initial-element nil))
您錯誤地診斷了問題。您傳遞給MAKE-ARRAY的第一個參數是兩個符號的列表,* NUMROWS *和* NUMCOLS *。但是,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-04 00:10:24
您是否已檢查vals是否按照預期讀入?我不確定我認爲這是一個問題,我也不認爲這是如何處理變量。 – zellio 2010-10-03 22:27:23