anchor.diff:                            (slot-value object ',slot-name))
                        (list new-item)
                        :key ,key :test ,test))))))
  -
  -
  -;;;;;;;;;;
  -;; MAIN ;;
  -;;;;;;;;;;
  -
  -(defun %proto-slot (class slot-name strategy &rest keys)
  -  "Dispatch to the appropriate strategy."
  -  (case strategy
  -    ((:simple)
  -     (apply #'%proto-slot/simple class slot-name keys))
  -    (:unique-merge
  -     (apply #'%proto-slot/unique-merge class slot-name keys))
  -    (t (error "Unknown proto-slot strategy ~S" strategy))))
  -
  -
  -(defmacro def-proto-slots (class &body (slot-defs))
  -  "Define prototypal accessor methods on a class' slots.
  -  Each slot-def is a list like this:
  -    (slot-name strategy &rest strategy-keyword-args)
  -  Available strategies and their valid keyword args are:
  -    :simple
  -      :base :accessor :reader :own-reader :writer
  -    :unique-merge
  -      :base :accessor :reader :own-reader :writer
  -      :test :key :finder :own-finder :adder
  -  See the proto-slots README for details."
  -  `(progn ,@(mapcar (lambda (slot-def)
  -                      (apply #'%proto-slot class slot-def))
  -                    slot-defs)))
  
positive.code: ;; UNIQUE-MERGE ;;
  ;;;;;;;;;;;;;;;;;;
  
  (defun %proto-slot/unique-merge
      (class slot-name &key
       base finder own-finder adder key test
       (accessor slot-name) (reader accessor) own-reader
  
negative.code: ;; SIMPLE ;;
  ;;;;;;;;;;;;
  
  (add-strategy :simple 'simple)
  
  (defun simple
      (class slot-name &key
       base (accessor slot-name) (reader accessor) own-reader
       (writer (and accessor (list 'setf accessor))))
  