anchor.diff:             (cons sheep cache))))
       (t nil)))
   
  -(defun memoize-sheep-hierarchy-list (sheep)
  -  (setf (%sheep-hierarchy-cache sheep) (compute-sheep-hierarchy-cache sheep))
  -  (%map-children 'memoize-sheep-hierarchy-list sheep))
  -
  -(defun std-compute-sheep-hierarchy-list (sheep)
  -  (%sheep-hierarchy-cache sheep))
  -
   (defun compute-sheep-hierarchy-list (sheep)
     (typecase sheep
       (std-sheep (std-compute-sheep-hierarchy-list sheep))
       (otherwise (compute-sheep-hierarchy-list-using-metasheep
                   (sheep-metasheep sheep) sheep))))
  +
  +(defun memoize-sheep-hierarchy-list (sheep)
  +  (setf (%sheep-hierarchy-cache sheep) (compute-sheep-hierarchy-list sheep))
  +  (%map-children 'memoize-sheep-hierarchy-list sheep))
   
   (defun std-finalize-sheep-inheritance (sheep)
     "Memoizes SHEEP's hierarchy list."
  
positive.code:              (awhen (find parent (the list minimal-elements) :test 'eq) (return it)))
        (return-from std-tie-breaker-rule it))))
  
  (defun compute-sheep-hierarchy-cache (sheep)
    "Lists SHEEP's ancestors, in precedence order."
    (cond
      ((cdr (%sheep-parents sheep))
  
negative.code: 
  (defun sheep-hierarchy-list (sheep)
    "Returns the full hierarchy-list for SHEEP"
    (%sheep-hierarchy-cache sheep))
  
  ;;; Inheritance predicates
  (defun parentp (maybe-parent child)
  