2010-10-03 16 views
2

我正在閱讀一個地圖文件中的函數內有以下代碼。我收到一個錯誤*numrows*是一個非法的維度。我認爲這是因爲lisp正在並行處理這些變量。我怎樣才能解決這個問題?如何在常見的Lisp中依次創建變量?

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

您是否已檢查vals是否按照預期讀入?我不確定我認爲這是一個問題,我也不認爲這是如何處理變量。 – zellio 2010-10-03 22:27:23

回答

7

您錯誤地診斷了問題。您傳遞給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 
) 
+0

謝謝!這就是訣竅! – 2010-10-04 00:10:24