anchor.diff:  (in-package :cl-zipper)
   
  -(defstruct node left ppath right)
  +(defstruct loc
  +  "A location consists of a distinguished tree, the current focus of attention
  +and its path, representing its surrounding context."
  +  (left "Nodes on the left of this node.")
  +  (ppath "Path to this node from the root.")
  +  (right "Nodes on the right of this node."))
   
   (defun zipper (lst)
     "Creates a zipper for the list lst."
  
positive.code: depth-first walk."
    (with-loc loc
      (when (and loc loc-path)
        (cond ((node-right loc-path) (replace-by-right loc-path))
              ((node-left loc-path) (replace-by-left loc-path))))))
  
  (defun replace-by-right (loc-path)
    "Replaces the current node at loc by the node at the right."
    (when loc-path
      (let ((right (node-right loc-path)))
        (list (car right)
              (make-node :left (node-left loc-path)
                         :ppath (node-ppath loc-path)
                         :right (cdr right))))))
  
  (defun replace-by-left (loc-path)
    "Replaces the current node at loc by the node at the left."
    (when loc-path
      (let ((left (node-left loc-path)))
        (list (car left)
              (make-node :left (cdr left)
                         :ppath (node-ppath loc-path)
                         :right (node-right loc-path))))))
negative.code: the top."
    (with-loc loc
      (when loc-path
        (list (concatenate 'list (reverse (loc-left loc-path))
                           (when loc-tree
                             (cons loc-tree (loc-right loc-path))))
              (loc-ppath loc-path)))))
  
  (defun go-next (loc)
    "Moves to the next loc in the hierarchy, depth-first. When reaching the end,
  