anchor.diff:                 If all the types are present and different, then ATTACH and
                  DETACH methods are created for the arguments in any order.
   
  -    Note: we should review this macro for TYPE vs.CLASS.
  +    Note: we should review this macro for TYPE vs. CLASS.
             Slots may be accessed only in instances of standard-class classes.
             Accessors may be used with any type.
   
  
positive.code: (defmacro define-association (name endpoints &rest options)
    "
  Define functions to manage the association:
      (name-LINK       a b ...)
      (name-UNLINK     a b ...)
      (name-CONTAINS-P a b ...) --> BOOLEAN
      (name-SIZE)  --> INTEGER
      (name-CLEAR) --> INTEGER
  taking &KEY arguments named for the ROLE names.
  There may be more than two endpoints, in case of ternary, etc associations.
  
  ENDPOINTS      a list of (ROLE &KEY TYPE ACCESSOR SLOT MULTIPLICITY MULTIPLE
  
negative.code:          (contains-p      (scat name '-contains-p)))
  
      `(progn
         ,@(let ((tslots (mapcar (lambda (endpoint)
                                   (destructuring-bind (role &key type slot &allow-other-keys) endpoint
                                     (list type slot)))
                                 endpoints)))
                (append
                 (when (second (second tslots))
                   (list `(ensure-class-slot ',(first (first tslots)) ',(second (second tslots)))))
                 (when (second (first tslots))
                   (list `(ensure-class-slot ',(first (second tslots)) ',(second (first tslots))))))) 
         (defun ,link (&key ,@link-parameters)
           ,(generate-addset name
                             (first link-parameters) (second link-parameters)
  