2016-03-02 169 views
2

我無法在lisp中獲得簡單的while循環!如何在LISP中執行while循環

(loop (while (row >= 0)) 
     setf(row (- row 1)) 
     (collect (findIndex row col)) 

while row is more or equal to 0我想遞減行並收集findIndex方法給出的結果。 假設col是給定的。

謝謝!

回答

6

環路的正確形式是以下:

(loop while (>= row 0) 
    do (setf row (- row 1))   ; or better: do (decf row) 
    collect (findIndex row col)) 

對於循環語法的詳細說明,請參見manual

4

如果你倒數,你不需要WHILE +遞減。

您的循環從row - 1降至-1。我們可以把它寫成FOR循環。這裏有兩個例子:

(loop for row-number from (1- row) downto -1 
     collect (find-index row-number col))) 

如果你想從row倒計時0(這裏使用的downfrom ... to代替from ... downto):

(loop for row-number downfrom row to 0 
     collect (find-index row-number col)))