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: 
  Note that `letrec' only binds variables: it can define recursive
  functions, but can't bind them as functions. (But see `fbindrec'.)"
    `(let (,@(mapcar #'car bindings))
       (psetq ,@(apply #'append bindings))
       (locally ,@body)))
  
  (defmacro letrec* ((&rest bindings) &body body)
    "Like LETREC, but the bindings are evaluated in order.
  See Waddell et al., *Fixing Letrec* for motivation.
  
  Cf. `fbindrec*'."
    `(let (,@(mapcar #'car bindings))
       (setq ,@(apply #'append bindings))
       (locally ,@body)))
  
  (defmacro receive (formals expr &body body)
    "Stricter version of `multiple-value-bind'.
  
negative.code: ;;; say, when initializing a timer whose function needs to refer to
  ;;; the timer itself.
  
  (defmacro letrec-with (setq (&rest bindings) &body body)
    `(let (,@(mapcar #'car bindings))
       (,setq ,@(apply #'append bindings))
       (locally ,@body)))
  
  (defmacro letrec ((&rest bindings) &body body)
    "Recursive LET.
  The idea is that functions created in BINDINGS can close over one
  