anchor.diff:  ;;; 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
  
positive.code: (in-package :serapeum)
  
  ;;;# `lret'
  
  (defmacro lret ((&rest bindings) &body body)
    "Return the initial value of the last binding in BINDINGS. The idea
  
negative.code: 
  Note that `letrec' only binds variables: it can define recursive
  functions, but can't bind them as functions. (But see `fbindrec'.)"
    `(letrec-with psetq ,bindings
       ,@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*'."
    `(letrec-with setq ,bindings
       ,@body))
  
  (defmacro receive (formals expr &body body)
    "Stricter version of `multiple-value-bind'.
  