История изменений
Исправление theNamelessOne, (текущая версия) :
Рекурсивный?
Не, через do
, например:
(defmacro while (condition &body body)
`(do ()
((not ,condition))
,@body))
(let ((counter 10))
(while (not (zerop counter))
(format t "tick ~a...~%" counter)
(decf counter))
(format t "BOOM!~%"))
при попытке выполнения выдаёт переполнение стека
Потому что происходит бесконечное раскрытие рекурсивного макроса.
Исходная версия theNamelessOne, :
Рекурсивный?
Не, через do
, например:
(defmacro while (condition &body body)
`(do ()
((not ,condition))
,@body))
(let ((counter 10))
(while (not (zerop counter))
(format t "tick ~a...~%" counter)
(decf counter))
(format t "BOOM!~%"))
при попытке выполнения выдаёт переполнение стека
Потому что происходит бесконечное раскрытие рекурсивного макроса.