anchor.diff:                ((list)
                  (let ((vendpoint (gensym)))
                    `(let ((,vendpoint ,(slot)))
  -                    (when (member ,value ,vendpoint :test ,this-test)
  +                    (when (find ,value ,vendpoint :test ,this-test :key ,this-key)
                         ,(if (zerop this-min)
                              `(setf ,(slot) (delete ,value ,vendpoint
  -                                                  :test ,this-test :count 1))
  +                                                  :test ,this-test :key ,this-key :count 1))
                              `(if  (< ,this-min (length ,vendpoint))
                                    (setf ,(slot) (delete ,value ,vendpoint
  -                                                       :test ,this-test :count 1))
  +                                                       :test ,this-test :key ,this-key :count 1))
                                    (error "The role ~A of the association ~A ~
                                            has reached its minimum multiplicity ~A."
                                           ',this-role ',association-name
  
positive.code: ;;; This kind of association will modify the class of the objects they
  ;;; associate, adding the needed slots.
  ;;;
  
  (eval-when (:load-toplevel :compile-toplevel :execute)
  
  
negative.code: MULTIPLE       boolean default NIL indicates whether the same objects may be
                 in relation together several times.
  
  COPY           if not NIL, a function used to copy the objects before storing
                 or returning them.
  
  LESSP          default is NIL.  A function used to compare the objects
                 put into the relation.
  
  TEST           default is (FUNCTION EQL), the function used to compare
                 the objects put into the relation.
  
     Note: If you set COPY, you will probably want to set TEST or LESSP too.
           TEST and LESSP are mutually exclusive.
  
           For strings, you may want to set TEST to EQUAL or EQUALP or
           LESSP to STRING< or STRING-LESSP
  
           For numbers, you may want to set TEST to =, or LESSP to <.
  
           COPY, TEST and LESSP are evaluated, so you can pass 'fun,
           (function fun) or (lambda (x) (fun x)).
  
  ORDERED        (only for REFERENCE, LIST, VECTOR and REIFIED).
  
                 NIL:  the objects are not ordered in the containers.
  
                 T:    If LESSP is not given, then the objects are kept
                       in the order of association in the containers.
                       The KEY of the objects are compared with the TEST
                       function.
  
                       If LESSP is given, then the objects are kept in
                       the order specified by LESSP applied on the KEY
                       of the objects.
  
  IMPLEMENTATION is (OR (MEMBER REFERENCE LIST VECTOR HASH-TABLE A-LIST P-LIST REIFIED)
                        (CONS (HASH-TABLE A-LIST P-LIST)
  