anchor.diff:          do (setf ulist (ucons-cdr ulist))))
   
   (defun ulist-shallow-copy (ulist)
  +  "Return a list of the elements of ULIST."
     (declare (ulist ulist))
     (loop while ulist
           collect (ucons-car ulist)
           do (setf ulist (ucons-cdr ulist))))
   
   (defun ulist-deep-copy (ulist)
  +  "Return a tree of the same shape as ULIST, but where all occuring ulists
  +   have been converted to lists."
     (declare (ulist ulist))
     (loop while ulist
           collect (let ((car (ucons-car ulist)))
  
positive.code: (in-package :petalisp)
  
  ;;; ucons - unique conses
  
  (deftype ucons-car () '(or fixnum symbol function character ucons))
  
  (deftype ulist () '(or ucons null))
  
  (defstruct (ucons
              (:constructor %ucons (car cdr))
              (:copier nil) ; this is the whole point, isn't it?
              (:predicate uconsp))
    (cdr   nil :type (or ucons null) :read-only t)
    (car   nil :type ucons-car       :read-only t)
    ;; TABLE tracks all uconses whose cdr is this cons
    (table nil :type (or list hash-table) :read-only nil))
  
  (macrolet
      ((define-ucxr-accessors ()
         (let (ucxr-forms)
  
negative.code:   (define-ucxr-accessors))
  
  (declaim (hash-table *ucons-root-table*))
  (defvar *ucons-root-table* (make-hash-table :test #'eql)
    "The table of all uconses whose cdr is NIL.")
  
  (declaim (inline ucons))
  (defun ucons (car cdr)
    "Given a suitable CAR and CDR, return a UCONS that is EQ to all future
     and past invocation of this function with the same arguments."
    (declare (type (or null ucons) cdr)
             (type ucar car)
             (values ucons))
    (flet ((hash-table-lookup (hash-table)
             (declare (hash-table hash-table))
             (or (gethash car hash-table)
                 (setf (gethash car hash-table)
                       (make-fresh-ucons car cdr))))
           (alist-lookup (alist)
             (declare (list alist))
             (or (cdr (assoc car alist))
                 (let ((ucons (make-fresh-ucons car cdr)))
                   (prog1 ucons
                     (cond
                       ((> (length alist) 5)
  