Переменная синтаксиса Lisp DO - PullRequest
6 голосов
/ 29 октября 2008

В «Практическом общем лиспе» Питера Сейбела он приводит такой пример:

(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)))

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

1 Ответ

12 голосов
/ 29 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...