anchor.diff:                     :format-args (list property-name sheep))
               nil))))
   
  -(defgeneric available-properties (sheep)
  -  (:documentation "Returns a list of property-spec objects describing all properties available to
  -SHEEP, including inherited ones."))
   (defmethod available-properties ((sheep standard-sheep))
     (let* ((direct-properties (sheep-direct-properties sheep))
            (avail-property-names (mapcar (lambda (p)
  
positive.code:                :format-control "Property ~A is unbound for sheep ~S"
                 :format-args (list property-name sheep)))))
  
  (defgeneric has-property-p (sheep property-name))
  (defmethod has-property-p ((sheep standard-sheep) property-name)
    "Returns T if a property with PROPERTY-NAME is available to SHEEP."
    (handler-case
        (when (property-owner sheep property-name)
          t)
      (unbound-property () nil)))
  
  (defgeneric (setf property-value) (new-value sheep property-name)
    (:documentation "Sets NEW-VALUE as the value of a direct-property belonging to SHEEP, named
  PROPERTY-NAME. If the property does not already exist anywhere in the hierarchy list, an error
  is signaled."))
  (defmethod (setf property-value) (new-value (sheep standard-sheep) property-name)
    (unless (symbolp property-name)
      (error "Property-name must be a symbol"))
    (if (has-property-p sheep property-name)
        (let ((property-table (sheep-property-value-table sheep)))
          (setf (gethash property-name property-table) new-value))
        (error "Property ~A does not exist for sheep ~A." property-name sheep)))
  
  ;; Reflection
  (defmethod print-object ((property-spec property-spec) stream)
    (print-unreadable-object (property-spec stream :identity t)
      (format stream "Property-Spec ~A" (property-spec-name property-spec))))
  (defun sheep-direct-properties (sheep)
    "Returns a set of direct property-spec definition metaobjects."
    (loop for pname being the hash-keys of (sheep-property-value-table sheep)
  
negative.code:                                    (property-spec-writers property)
                                     (property-owner sheep (property-spec-name property)))))))
  
  (defmethod direct-property-summary ((sheep standard-sheep) &optional (stream *standard-output*))
    (format stream
            "~&Sheep: ~A~%~
  