(defmacro steroid-let (&body body)
(flet ((transform (form bodytail)
(if (and (listp form)
(eql :define (car form)))
`((let (,(cdr form))
,@(or bodytail `(,(cadr form)))))
(cons form bodytail))))
`(progn
,@(reduce #'transform body :initial-value nil :from-end t))))
(progn
#1=
(steroid-let
(:define x 2)
(:define c 1)
(setf c (+ c x))
(:define y (1+ c))
(format t "c: ~a, y: ~a~%" c y))
(print (macroexpand '#1#)))
KGRlZm1hY3JvIHN0ZXJvaWQtbGV0ICgmYm9keSBib2R5KQogIChmbGV0ICgodHJhbnNmb3JtIChmb3JtIGJvZHl0YWlsKQogICAgICAgICAgIChpZiAoYW5kIChsaXN0cCBmb3JtKQogICAgICAgICAgICAgICAgICAgIChlcWwgOmRlZmluZSAoY2FyIGZvcm0pKSkKICAgICAgICAgICAgICAgYCgobGV0ICgsKGNkciBmb3JtKSkKICAgICAgICAgICAgICAgICAgICxAKG9yIGJvZHl0YWlsIGAoLChjYWRyIGZvcm0pKSkpKQogICAgICAgICAgICAgICAoY29ucyBmb3JtIGJvZHl0YWlsKSkpKQogICAgYChwcm9nbgogICAgICAgLEAocmVkdWNlICMndHJhbnNmb3JtIGJvZHkgOmluaXRpYWwtdmFsdWUgbmlsIDpmcm9tLWVuZCB0KSkpKQoKKHByb2duCiMxPQooc3Rlcm9pZC1sZXQKICAgICg6ZGVmaW5lIHggMikKICAgICg6ZGVmaW5lIGMgMSkKICAgIChzZXRmIGMgKCsgYyB4KSkKICAgICg6ZGVmaW5lIHkgKDErIGMpKQogICAgKGZvcm1hdCB0ICJjOiB+YSwgeTogfmF+JSIgYyB5KSkKCihwcmludCAobWFjcm9leHBhbmQgJyMxIykpKQ==