2016-03-02 399 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)))