Lisp DO variable syntax reasoning
Question
In Peter Seibel's Practical Common Lisp, he gives this example:
(do ((nums nil) (i 1 (1+ i)))
((> i 10) (nreverse nums))
(push i nums))
I can see how it works, using nums inside the loop but not giving it a step-form. Why would you put nums in the variable-definition rather than do this:
(let (nums) (do ((i 1 (+ i 1)))
((> i 10) (nreverse nums))
(push i nums)))
I'm sure there's a good reason, but I don't get it yet.
Solution
Because it's convenient and saves indentation. Furthermore, the accumulator conceptually belongs to the loop, so why not put it there?
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow