anchor.diff:  	(expex-move-arg-std ex x)))
   
   (defun expex-filter-and-move-args (ex x)
  -  (assoc-splice (mapcar (fn expex-move-arg ex _) (expex-guest-filter-arguments ex x))))
  +  (with ((moved new-expr) (assoc-splice (mapcar (fn expex-move-arg ex _) (expex-guest-filter-arguments ex x))))
  +    (values (apply #'append moved) new-expr)))
   
   (defun expex-move-slot-value (ex x)
     (with ((moved new-expr) (expex-filter-and-move-args ex (list .x.)))
  -    (values (apply #'append moved)
  -			`(%slot-value ,new-expr. ,..x.))))
  +    (values moved `(%slot-value ,new-expr. ,..x.))))
   
   (defun expex-move-args-0 (ex x)
     (with ((moved new-expr) (expex-filter-and-move-args ex x))
  -    (values (apply #'append moved)
  -			new-expr)))
  +    (values moved new-expr)))
   
   ;; Move subexpressions out of a parent.
   ;;
   ;; Returns the head of moved expressions and a new parent with
   ;; replaced arguments.
   (defun expex-move-args (ex x)
  -  (if (%slot-value? x)
  -	  (expex-move-slot-value ex x)
  -	  (expex-move-args-0 ex x)))
  +  (? (%slot-value? x)
  +	 (expex-move-slot-value ex x)
  +	 (expex-move-args-0 ex x)))
   
   ;;;; EXPRESSION EXPANSION
   
  
positive.code:   (funcall (expex-setter-filter ex) x))
  
  (defun expex-guest-filter-arguments (ex x)
    (mapcar (fn (funcall (expex-argument-filter ex) _)) x))
  
  ;;;; UTILS
  
  
negative.code: ;; XXX this sucks blood out of stones. Should have proper macro expansion
  ;; instead.
  (defun expex-convert-quotes (x)
    (mapcar (fn ? (quote? _)
  			    `(%quote ,._.)
  			    _)
  		  x))
  
  ;; Expand arguments to function.
  