anchor.diff:  ;; TODO: Store child sets
   ;;       Prevent orphaned frames
   
  +
   (defun tf-tree-frame-compare (a b)
     (if (null a)
         (if (null b)
  
positive.code:           1
            (sycamore-util:string-compare a b))))
  
  (defun make-tf-tree ()
    "Create a new TF tree.
  The tree is a map from the frame name to its relative transform."
    (sycamore:make-tree-map #'tf-tree-frame-compare))
  
  (defun tf-tree-insert (tree tf-tag)
    "Add tagged TF to tree."
    (sycamore:tree-map-insert tree (tf-tag-child tf-tag) tf-tag))
  
  (defun tf-tree-remove (tree frame)
    "Remove FRAME from tree"
    (sycamore:tree-map-remove tree frame))
  
  (defun tf-tree-find (tree frame)
    "Find the TF in the tree"
    (let ((tf (sycamore:tree-map-find tree frame)))
      (when tf (assert (equal frame (tf-tag-child tf))))
      tf))
  
  (defun tf-tree-split-insert (tree parent tf-raw child)
    "Add untagged TF to tree.
  
  Tree will store the tagged value"
    (tf-tree-insert tree (tf-tag parent tf-raw child)))
  
  (defun tf-tree-absolute-map (relative-tree &optional frame)
    "Compute the absolute transforms."
  
negative.code:                                     (assert (equal frame (tf-tag-child rel-tf)))
                                      (rec absolute-tree frame))
                                    (make-tf-tree)
                                    (tf-tree-relative-map relative-tree))))))
  
  (defun tf-tree-absolute-tf (relative-tree frame)
    "Compute the absolute transform of FRAME."
  