LINUX.ORG.RU

История изменений

Исправление 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