Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Lisp DO variable syntax reasoning

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.

like image 522
JasonFruit Avatar asked Oct 29 '08 19:10

JasonFruit


1 Answers

Because it's convenient and saves indentation. Furthermore, the accumulator conceptually belongs to the loop, so why not put it there?

like image 109
Matthias Benkard Avatar answered Sep 28 '22 18:09

Matthias Benkard