anchor.diff:  forgetting to return it).
   
   Cf. `aprog1' in Anaphora."
  -  (if (null bindings)
  -      `(let ()
  -         ,@body)
  -      (multiple-value-bind (body decls)
  -          (parse-body body)
  -        `(let ,bindings
  -           ,@decls
  -           (prog1 ,(ensure-car (lastcar bindings))
  -             ,@body)))))
  +  `(lret-aux let ,bindings
  +     ,@body))
   
   (defmacro lret* ((&rest bindings) &body body)
     "Cf. `lret'."
  -  (if (null bindings)
  -      `(let* ()
  -         ,@body)
  -      (multiple-value-bind (body decls)
  -          (parse-body body)
  -        `(let* ,bindings
  -           ,@decls
  -           (prog1 ,(ensure-car (lastcar bindings))
  -             ,@body)))))
  +  `(lret-aux let* ,bindings
  +     ,@body))
   
   ;;;# `letrec'
   
  
positive.code: ;;; say, when initializing a timer whose function needs to refer to
  ;;; the timer itself.
  
  (defmacro letrec ((&rest bindings) &body body)
    "Recursive LET.
  The idea is that functions created in BINDINGS can close over one
  
negative.code: (in-package :serapeum)
  
  ;;;# `lret'
  
  (defmacro lret-aux (let (&rest bindings) &body body)
    (if (null bindings)
        `(,let ()
           ,@body)
        (multiple-value-bind (body decls)
            (parse-body body)
          (let ((last-binding (ensure-car (lastcar bindings))))
            `(,let ,bindings
               ,@decls
               (prog1 ,last-binding
                 ,@body))))))
  
  (defmacro lret ((&rest bindings) &body body)
    "Return the initial value of the last binding in BINDINGS. The idea
  