LINUX.ORG.RU

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

Исправление monk, (текущая версия) :

Ее нельзя без гигиены избежать

Можно, но сложно.

Например так:

(defmacro aif (test then &optional else)
  (let ((it (gensym)))
    `(let ((,it ,test))
        (if ,it ,(maptree (lambda (x) (if (eq x 'it) it x))
                          then)
                ,else))))

Для совсем правильного aif надо вместо maptree какой-то map, который обходит всё, кроме голов списков.

Исходная версия monk, :

Ее нельзя без гигиены избежать

Можно, но сложно.

Например так:

(defmacro aif (test then &optional else)
  (let ((it (gensym)))
    `(let ((,it test))
        (if ,it ,(maptree (lambda (x) (if (eq x 'it) it x))
                          then)
                ,else))))

Для совсем правильного aif надо вместо maptree какой-то map, который обходит всё, кроме голов списков.