История изменений
Исправление loz, (текущая версия) :
Так а зачем ты body в последнем вызове раскрываешь?
(defmacro while (condition body)
`(progn ,body
(when ,condition
(while ,condition ,body))))
CL-USER> (defvar *var* 3)
*VAR*
CL-USER> (while (plusp *var*) (progn (format t "var: ~a~&" *var*)
(decf *var*)))
var: 3
var: 2
var: 1
NIL
CL-USER> (macroexpand-1 '(while (plusp *var*) (progn (format t "var: ~a~&" *var*)
(decf *var*))))
(PROGN
(PROGN (FORMAT T "var: ~a~&" *VAR*) (DECF *VAR*))
(WHEN (PLUSP *VAR*)
(WHILE (PLUSP *VAR*) (PROGN (FORMAT T "var: ~a~&" *VAR*) (DECF *VAR*)))))
T
Исходная версия loz, :
Так а зачем ты body в последнем вызове раскрываешь?
(defmacro while (condition body)
`(progn ,body
(when ,condition
(while ,condition ,body))))
CL-USER> (defvar *var* 3)
*VAR*
CL-USER> (while (plusp *var*) (progn (format t "var: ~a~&" *var*)
(decf *var*)))
var: 3
var: 2
var: 1
NIL