如何在LISP中进行while循环

How to do a while loop in LISP

我无法在Lisp中使用简单的while循环来工作!

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

当行大于或等于0时,我想减少行并收集findIndex方法给出的结果。
假设给出col。

谢谢!!!


正确的循环形式如下:

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

有关循环语法的详细说明,请参见手册。


如果递减计数,则无需递减WHILE

您的循环从row - 1下降到-1。我们可以将其写为FOR循环。这是两个示例:

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

如果要从row倒数到0(此处使用downfrom ... to而不是from ... downto):

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