Hyperspec сообщает:
Во время обработки формы результата переменная привязывается к числу выполнений тела.
Итак, вВ третьей форме, в форме результата, переменная сначала привязывается к числу раз, когда тело было выполнено первым, а затем вычисляется третья форма.
Именно поэтому значение переменной равно 10
а не текущее значение 9
.
Это также видно, если вы выполните
(macroexpand-1 '(dotimes (temp-one 3 temp-one) (format t "~3d~%" temp-one)))
;; resulting in CLISP in:
;; (DO ((TEMP-ONE 0 (1+ TEMP-ONE))) ((>= TEMP-ONE 10) TEMP-ONE)
;; (FORMAT T "~3d~%" TEMP-ONE)) ;
;; T
Итак, наконец, (1+ TEMP-ONE)
возвращается из цикла DO
, к которому DOTIMES
расширяется до - как указано @ zut.