(do ((i 0 (1+ i)))
((= i n) arr)
(do ((j 0 (1+ j)))
((= j n))
(setf (aref arr i j) (read)))
這樣我是讀取一個二維陣列arr。i先賦值為0,接著判斷(= i n)是否為真,如果是,則退出,返回arr;如果非真,則執行迴圈體,這裡是巢狀的do語句。執行完這個巢狀的do語句後,i將被賦值為(1+ i),i的值被更新,接著再去判斷(= i n)是否為真……直到它為真的時候,退出迴圈,執行這個判斷語句後的表示式,將其值作為do語句值返回。
(dolist (x "(5 2 0 1 3 1 4) s)
(setf s (+ s x))
這程式碼功能是把一些數加起來。x依次緊跟其後的列表中的每一個值,然後執行迴圈體。最後把s返回。
任何語言上的問題,可以直接找《Ansi Common Lisp》的最後的索引,索引附錄很好很強大。
(do ((i 0 (1+ i)))
((= i n) arr)
(do ((j 0 (1+ j)))
((= j n))
(setf (aref arr i j) (read)))
這樣我是讀取一個二維陣列arr。i先賦值為0,接著判斷(= i n)是否為真,如果是,則退出,返回arr;如果非真,則執行迴圈體,這裡是巢狀的do語句。執行完這個巢狀的do語句後,i將被賦值為(1+ i),i的值被更新,接著再去判斷(= i n)是否為真……直到它為真的時候,退出迴圈,執行這個判斷語句後的表示式,將其值作為do語句值返回。
(dolist (x "(5 2 0 1 3 1 4) s)
(setf s (+ s x))
這程式碼功能是把一些數加起來。x依次緊跟其後的列表中的每一個值,然後執行迴圈體。最後把s返回。
任何語言上的問題,可以直接找《Ansi Common Lisp》的最後的索引,索引附錄很好很強大。