Рассуждение о синтаксисе переменных Lisp DO

В Practical Common Lisp Питера Сейбела приводится следующий пример:

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

Я вижу, как это работает, используя числа внутри цикла, но не придавая ему пошаговой формы. Почему бы вам поместить nums в определение переменной, а не сделать это:

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

Я уверен, что есть веская причина, но я пока не понимаю.


person JasonFruit    schedule 29.10.2008    source источник


Ответы (1)


Потому что это удобно и экономит отступы. Кроме того, аккумулятор концептуально принадлежит петле, так почему бы не поместить его туда?

person Matthias Benkard    schedule 29.10.2008