Вопрос

В Практическом 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)))

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

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top