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!!!

2 Answers 2

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.

Sign up to request clarification or add additional context in comments.

Comments

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)))

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.