anchor.diff:  (defvar *expexsym-counter* 0)
   
   (defstruct expex
  -  functionp
  -  function-arguments
  +  (function? #'((x)
  +				  (functionp (symbol-value x))))
  +  (function-arguments #'function-arguments)
     (function-collector #'((fun args))))
   
   ;; Returns newly created, unique symbol.
  
positive.code: ;; The arguments are replaced by gensyms.
  (defun expex-std-expr (ex x)
    (with (argexp (expex-argexpand ex (car x) (cdr x))
  		 (pre newargs) (expex-args ex argexp))
      (values pre
  			(list (cons (car x) newargs)))))
  
  ;; Expand expression depending on type.
  ;;
  
negative.code: 						(eq '&rest (car x)))
  				   (expex-argexpand-rest (cdr x))
  				   x))
  		  (cdrlist (argument-expand fun (funcall (expex-function-arguments ex) fun) args t))))
  
  (defun expex-argexpand (ex fun args)
    (if (and (atom fun)
  		   (funcall (expex-function? ex) fun))
  	  (expex-argexpand-do ex fun args)
  	  args))
  
  