anchor.diff:  
   ;;; Special version if test and key both are given.
   
  -(defun subst-test-key (new old tree test key)
  +(defun |subst key=other-test-other| (new old tree test key)
     (labels ((traverse (tree)
                (cond ((funcall test old (funcall key tree)) new)
                      ((atom tree) tree)
  
positive.code: 
  ;;; Special case when test is eql and key is given.
  
  (defun nsublis-eql-key (alist tree key)
    (labels ((traverse (tree)
               (let ((entry (with-alist-elements (element alist nsublis)
  			    (when (eql (funcall key (car tree)) (car element))
  
negative.code:   (if key
        (if test-given
            (if (or (eq test #'eq) (eq test 'eq))
                (|sublis key=other test=eq| alist tree key)
                (if (or (eq test #'eql) (eq test 'eql))
                    (|sublis key=other test=eql| alist tree key)
                    (|sublis key=other-test-other| alist tree test key)))
            (if test-not-given
  	      (|sublis key=other test-not=other| alist tree test-not key)
                (|sublis key=other test=eql| alist tree key)))
        (if test-given
            (if (or (eq test #'eq) (eq test 'eq))
                (|sublis key=identity test=eq| alist tree)
                (if (or (eq test #'eql) (eq test 'eql))
                    (|sublis key=identity test=eql| alist tree)
                    (|sublis key=identity test=other| alist tree test)))
            (if test-not-given
  	      (|sublis key=identity test-not=other| alist tree test-not)
                (|sublis key=identity test=eql| alist tree)))))
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;;
  