anchor.diff:               ~3TOwner: ~13T~A~%~%~}~}"
               sheep (loop for property in all-properties
                        collect (list (property-spec-name property)
  -                                   (direct-property-value shee property)
  +                                   (direct-property-value sheep property)
                                      (property-spec-allocation property)
                                      (property-spec-readers property)
                                      (property-spec-writers property)
  
positive.code: (defmethod remove-property ((sheep standard-sheep) property-name)
    (if (has-direct-property-p sheep property-name)
        (progn (remhash property-name (sheep-property-value-table sheep))
               sheep)
        (error "Cannot remove property: ~A is not a direct property of ~A" property-name sheep)))
  
  (defgeneric remove-all-direct-properties (sheep))
  (defmethod remove-all-direct-properties ((sheep standard-sheep))
    (clrhash (sheep-property-value-table sheep))
    sheep)
  
  (defgeneric direct-property-value (sheep property-name)
  
negative.code: 
  (defun direct-property-spec (sheep property-name)
    (unless (has-direct-property-p sheep property-name)
      (signal 'unbound-property))
    (nth-value 0 (gethash property-name (sheep-property-spec-table sheep))))
  
  (defgeneric property-owner (sheep property-name &optional errorp)
    (:documentation "Returns the sheep object with a direct-property called PROPERTY-NAME from which
  