anchor.diff:      (| pred (= (expander-pred !) [& (cons? _)
                                       (symbol? _.)
   	                                (expander-macro-function ! _.)]))
  -    (| call (= (expander-call !) [(& *expander-print* (print _))
  -                                  (apply (expander-macro-function ! _.) ._)]))
  +    (| call (= (expander-call !) [apply (expander-macro-function ! _.) ._]))
       (= (expander-lookup !)
          #'((expander name)
              (href (expander-macros expander) name)))))
  
positive.code: 
  (defun expander-expand-once (expander-name x)
    (alet (expander-get expander-name)
      (| (expander? !) (error "Expander ~A is not defined." (symbol-name expander-name)))
      (with-temporaries (*macro?*     (expander-pred !)
                         *macrocall*  (expander-call !))
        (%macroexpand x))))
  
  (defun expander-expand (expander-name expr)
    (alet (expander-get expander-name)
      (| (expander? !) (error "Expander ~A is not defined." (symbol-name expander-name)))
      (funcall (expander-pre !))
      (prog1
        (repeat-while-changes [expander-expand-once expander-name _] expr)
  
negative.code: 
  (defun expander-get (name)
    (cdr (assoc name *expanders* :test #'eq)))
  
  (defun expander-macro-function (expander-name macro-name)
    (href (expander-macros expander-name) macro-name))
  