How to do a while loop in LISP
Asked Answered
I

2

7

I cannot get a simple while loop to work in lisp!

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

while row is more or equal to 0 i want to decrement row and collect the result given by findIndex method. Suppose the col is given.

Thanks!!!

Indentation answered 2/3, 2016 at 5:42 Comment(0)
M
19

The correct form of the loop is the following:

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

For a detailed description of the loop syntax, see the manual.

Magyar answered 2/3, 2016 at 6:4 Comment(0)
D
4

If you count down, you don't need WHILE+decrement.

Your loop goes from row - 1 down to -1. We can write it as a FOR loop. Here are two examples:

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

If you want to count down from row to 0 (here using downfrom ... to instead of from ... downto):

(loop for row-number downfrom row to 0
      collect (find-index row-number col)))
Dunlin answered 2/3, 2016 at 8:16 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.