anchor.diff:  
   ;;; Special version if test-not and key both are given
   
  -(defun nsubst-test-not-key (new old tree test key)
  +(defun |nsubst key=other test-not=other| (new old tree test key)
     (labels ((traverse (tree)
                (cond ((not (funcall test old (funcall key (car tree))))
                       (setf (car tree) new))
  
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))
                (|subst key=other test=eq| new old tree key)
                (if (or (eq test #'eql) (eq test 'eql))
                    (|subst key=other test=eql| new old tree key)
                    (|subst key=other-test-other| new old tree test key)))
            (if test-not-given
  	      (|subst key=other test-not=other| new old tree test-not key)
                (|subst key=other test=eql| new old tree key)))
        (if test-given
            (if (or (eq test #'eq) (eq test 'eq))
                (|subst key=identity test=eq| new old tree)
                (if (or (eq test #'eql) (eq test 'eql))
                    (|subst key=identity test=eql| new old tree)
                    (|subst key=identity test=other| new old tree test)))
            (if test-not-given
  	      (|subst key=identity test-not=other| new old tree test-not)
                (|subst key=identity test=eql| new old tree)))))
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;;
  