How to do a while loop in LISP

前端 未结 2 1683
忘了有多久
忘了有多久 2021-01-12 23:47

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

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

相关标签:
2条回答
  • 2021-01-13 00:17

    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.

    0 讨论(0)
  • 2021-01-13 00:27

    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)))
    
    0 讨论(0)
提交回复
热议问题