anchor.diff:  	 ,@body))))
   
   (defmacro doplist ((key value plist &optional result) &body body)
  -  "Analogous to DOLIST, but for plists."
  +  "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."
  +  "Analogous to DOLIST, but for vectors.
  +Establishes a block named NIL."
     `(loop for ,var across ,vector
   	 do (progn ,@body)
   	 ,@(if result
  
positive.code: (defmacro while* (test &body body)
    "TEST is evaluated. If the result is true, then BODY is executed as
  an implicit PROGN, else the loop terminates. This cycle repeats as
  long as TEST evaluates to true."
    `(loop while ,test do (progn ,@body)))
  
negative.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).
  Establishes a block named NIL."
    (with-unique-names (ignored-var)
      `(dotimes (,ignored-var ,count ,@(if result (list result)))
         ,@body)))
  