История изменений
Исправление q0tw4, (текущая версия) :
Ну и куда ты воткнёшь здесь gensym
Возьму и воткну:
(defun subst-expr (expr var val)
(cond ((consp expr) (cons (subst-expr (car expr) var val) (subst-expr (cdr expr) var val)))
((equalp expr var) val)
(t expr)))
(defmacro aif (test then &optional else)
(let ((sym (gensym)))
`(let ((,sym ,test))
(if ,sym ,(subst-expr then 'it sym) ,(subst-expr else 'it sym)))))
(defmacro fwrite (stream x)
`(aif ,stream (format it "~a" ,x) nil))
(fwrite t 3) ; => 3
(aif 3 (fwrite t it)) ; => 3
Исходная версия q0tw4, :
Ну и куда ты воткнёшь здесь gensym
Ну так сделаю в лиспе маленький ракет:
(defun subst-expr (expr var val)
(cond ((consp expr) (cons (subst-expr (car expr) var val) (subst-expr (cdr expr) var val)))
((equalp expr var) val)
(t expr)))
(defmacro aif (test then &optional else)
(let ((sym (gensym)))
`(let ((,sym ,test))
(if ,sym ,(subst-expr then 'it sym) ,(subst-expr else 'it sym)))))
(defmacro fwrite (stream x)
`(aif ,stream (format it "~a" ,x) nil))
(fwrite t 3) ; => 3
(aif 3 (fwrite t it)) ; => 3