Переменная синтаксиса Lisp DO
Вопрос
В Практическом Common Lisp Питера Сейбела он приводит такой пример:
(do ((nums nil) (i 1 (1+ i)))
((> i 10) (nreverse nums))
(push i nums))
Я могу видеть, как это работает, используя числа внутри цикла, но не давая ему пошаговую форму. Почему вы должны указывать числа в определении переменной, а не делать это?
(let (nums) (do ((i 1 (+ i 1)))
((> i 10) (nreverse nums))
(push i nums)))
Я уверен, что есть веская причина, но я ее пока не понимаю.
Решение
Потому что это удобно и сохраняет отступы. Кроме того, аккумулятор концептуально относится к циклу, так почему бы не положить его туда?
Не связан с StackOverflow