anchor.diff:    "Analogous to DOLIST, but for alists.
   Throws an error if one of the items in the list is not a list (cons or
   nil). If an entry is NIL, then both key and value will be NIL (or
  -should this throw an error?)."
  +should this throw an error?).
  +Establishes a block named NIL."
     (with-unique-names (assoc)
       `(dolist (,assoc ,alist ,result)
         (let ((,key (car ,assoc))
  
positive.code:   "Just like DOTIMES, but without a var argument.
  This saves you from having to name the variable and makes explicit the
  fact you won't need its value. Of marginal value, but offers a nice
  alternative to (loop repeat count do body finally result)."
    (with-unique-names (ignored-var)
      `(dotimes (,ignored-var ,count ,@(if result (list result)))
         ,@body)))
  
negative.code: 	 ,@body))))
  
  (defmacro doplist ((key value plist &optional result) &body body)
    "Analogous to DOLIST, but for plists.
  Establishes a block named NIL."
    `(loop for (,key ,value) on ,plist by #'cddr
  	 do (progn ,@body)
  	 finally (return ,result)))
  
  (defmacro dovector ((var vector &optional result) &body body)
    "Analogous to DOLIST, but for vectors.
  Establishes a block named NIL."
    `(loop for ,var across ,vector
  	 do (progn ,@body)
  	 ,@(if result
  