anchor.diff:     #:equalper
      #:plist-val
      #:rem-plist-val
  +   #:rem-plist-val!
      #:set-plist-val
  +   #:set-plist-val!
      #:call-if-applicable
      #:call-applicable-fns
   
  
positive.code:           (T (collect k into plist)
               (collect v into plist)))
      (finally (return (values plist removed)))))
  
  (defmethod set-plist-val (new id list &key (test #'equalper) (key #'identity))
    (iter
  
negative.code:      (unless collected
         (setf res (list* id new res)))
       (return res))))
  
  (defmacro set-plist-val! (new id place &key (test #'equalper) (key #'identity))
    `(setf ,place
      (set-plist-val ,new ,id ,place :test ,test :key ,key)))
  
  (defun %slot-readers (slots)
    (iter (for slot in (ensure-list slots))
  