anchor.diff:      result))
   
   
  -(eval-when (:compile-toplevel :load-toplevel :execute)
  -  (export 'find-data))
  -(defmethod find-data (data (history history-tree) &key (test #'equal) ensure-p)
  -  "Find a tree node matching DATA in HISTORY and return it.
  -If ENSURE-P is non-nil, create this node when not found.
  -Search is done with the help of TEST argument."
  -  (let ((match (find-node data history :test test :key #'data)))
  -    ;; TODO: `add-child' changes `current'. Always change `current' on match?
  -    (or match (when ensure-p (add-child data history :test test)))))
  -
  -(eval-when (:compile-toplevel :load-toplevel :execute)
  -  (export 'delete-data))
  -(defmethod delete-data (data (history history-tree) &key (test #'equal) rebind-children-p)
  -  "Delete node(s) matching DATA from HISTORY and return the last deleted node.
  -If the node has children itself, and REBIND-CHILDREN-P is not nil, these
  -will become children of the node's parent. Search is done with the
  -help of TEST argument."
  -  (let ((last-deleted nil))
  -    (do-tree (node history)
  -      (when (funcall test data (data node))
  -        (setf (children (parent node)) (append (when rebind-children-p (children node))
  -                                               (remove node (children (parent node))))
  -              last-deleted node)))
  -    last-deleted))
  +;; (eval-when (:compile-toplevel :load-toplevel :execute)
  +;;   (export 'find-data))
  +;; (defmethod find-data (data (history history-tree) &key (test #'equal) ensure-p)
  +;;   "Find a tree node matching DATA in HISTORY and return it.
  +;; If ENSURE-P is non-nil, create this node when not found.
  +;; Search is done with the help of TEST argument."
  +;;   (let ((match (find-node data history :test test :key #'entry)))
  +;;     ;; TODO: `add-child' changes `current'. Always change `current' on match?
  +;;     (or match (when ensure-p (add-child data history :test test)))))
  +
  +;; (eval-when (:compile-toplevel :load-toplevel :execute)
  +;;   (export 'delete-data))
  +;; (defmethod delete-data (data (history history-tree) &key (test #'equal) rebind-children-p)
  +;;   "Delete node(s) matching DATA from HISTORY and return the last deleted node.
  +;; If the node has children itself, and REBIND-CHILDREN-P is not nil, these
  +;; will become children of the node's parent. Search is done with the
  +;; help of TEST argument."
  +;;   (let ((last-deleted nil))
  +;;     (do-tree (node history)
  +;;       (when (funcall test data (data node))
  +;;         (setf (children (parent node)) (append (when rebind-children-p (children node))
  +;;                                                (remove node (children (parent node))))
  +;;               last-deleted node)))
  +;;     last-deleted))
   
   
   (deftype non-negative-integer ()
  
positive.code: Test is done with the TEST argument.
  Return (values OWNER (current OWNER))."
    (when (current owner)
      (let ((match (find-child data owner :test test)))
        (when match
          (visit owner match))))
    (values history (current history)))
  
  (export-always 'go-to-owned-child)
  (defmethod go-to-owned-child (data (owner owner) &key (test #'equal))
  
negative.code:   "Go COUNT first-children down from the current OWNER node.
  Return (values OWNER (CURRENT OWNER)) so that `back' and `forward' calls can be
  chained."
    (check-type count positive-integer)
    (when (and (current owner)
               (children (current owner)))
      (visit (forward-child (current-binding owner)))
  