История изменений
Исправление q0tw4, (текущая версия) :
Ещё надо учесть конструкции типа (abc it), где abc — макрос
Плавно приходим к racket way (врядли реально починить все случаи с eval, вытаскиванием за контекст и прочим)
(defmacro aif (it-sym test then &optional else)
`(let ((,it-sym ,test))
(if ,it-sym ,then ,else)))
(defmacro fwrite (stream x)
(let ((it (gensym)))
`(aif ,it ,stream (format ,it "~a" ,x) nil)))
(fwrite t 3) ; => 3
(aif it 3 (fwrite t it)) ; => 3
после чего чешешь затылок и говоришь, верну ка я if вместо aif и будет мне счастье.
Исходная версия q0tw4, :
Ещё надо учесть конструкции типа (abc it), где abc — макрос
Плавно приходим к racket way
(defmacro aif (it-sym test then &optional else)
`(let ((,it-sym ,test))
(if ,it-sym ,then ,else)))
(defmacro fwrite (stream x)
(let ((it (gensym)))
`(aif ,it ,stream (format ,it "~a" ,x) nil)))
(fwrite t 3) ; => 3
(aif it 3 (fwrite t it)) ; => 3
после чего чешешь затылок и говоришь, верну ка я if вместо aif и будет мне счастье.