(defmacro lets ((&rest substs) &body body)
"Did someone write let-but-its-substs already? #commonLisp #macro #programming "
(loop
:for body1 := body :then body2
:for body2
:=
(loop
:for new-body := body1
:then (subst new old new-body :test 'equal)
:for (old new) :in substs
:finally (return new-body))
:when (equal body1 body2)
:return (append '(progn) body1)))