В 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)))
Я уверен, что есть веская причина, но я пока не понимаю.