anchor.diff:       (error "Atom expected as expander-name instead of ~A." expander-name))
     (| (atom name)
        (error "Atom expected as macro-name instead of ~A for expander ~A." name expander-name))
  -  (with-gensym g
  -    `(progn
  -       (& (expander-has-macro? ',expander-name ',name)
  -          (error ,(format nil "Redefinition of macro ~A in expander ~A." name expander-name)))
  -       (defun ,g ,args ,@body)
  -       (alet (expander-macros (expander-get ',expander-name))
  -         (= (href ! ',name) #',g)))))
  +  (let expanded-argdef (argument-expand-names 'define-expander-macro args)
  +    (with-gensym g
  +      `(progn
  +         (& (expander-has-macro? ',expander-name ',name)
  +            (error ,(format nil "Redefinition of macro ~A in expander ~A." name expander-name)))
  +           (defun ,g ,expanded-argdef ,@body)
  +           (alet (expander-get ',expander-name)
  +             (alet (expander-macros !)
  +               (= (href ! ',name) #',g))
  +             (alet (expander-argdefs !)
  +               (= (href ! ',name) `,args)))))))
   
   (defun expander-expand-once (expander-name x)
     (alet (expander-get expander-name)
  
positive.code: 
  (defstruct expander
    macros
    pred
    call
    pre
  
negative.code: (defun expander-macro-function (expander-name macro-name)
    (href (expander-macros expander-name) macro-name))
  
  (defun expander-macro-argdef (expander-name macro-name)
    (href (expander-argdefs expander-name) macro-name))
  
  (defun (= expander-macro-function) (new-function expander-name macro-name)
    (= (href (expander-macros expander-name) macro-name) new-function))
  
  (defun define-expander (expander-name &key (pre nil) (post nil) (pred nil) (call nil))
    (format t "Making expander ~A.~%" expander-name)
    (aprog1 (make-expander :macros (make-hash-table :test #'eq)
                           :argdefs (make-hash-table :test #'eq)
                           :pred pred
                           :call call
                           :pre (| pre #'(nil))
  