2008-10-29 33 views
6

在彼得·塞貝爾的實用的Common Lisp,他給出了這樣的例子:Lisp的DO變量語法推理

(do ((nums nil) (i 1 (1+ i))) 
    ((> i 10) (nreverse nums)) 
    (push i nums)) 

我可以看到它是如何工作的,使用NUMS內循環,但不能給它一個臺階形。爲什麼你會把NUMS在變量定義,而不是這樣做:

(let (nums) (do ((i 1 (+ i 1))) 
     ((> i 10) (nreverse nums)) 
     (push i nums))) 

我敢肯定有一個很好的理由,但我不明白這一點呢。

回答

12

因爲它很方便,可以節省縮進。此外,累加器在概念上屬於循環,爲什麼不把它放在那裏呢?