(defn im-stmts [stmts]
(cond
(empty? stmts) `nil
(and (seq? (first stmts))
(= 'let (ffirst stmts)))
`(let ~(second (first stmts))
~@(im-stmts (rest stmts)))
true `(do ~(first stmts) ~(im-stmts (rest stmts)))))
(defmacro im [& body]
(im-stmts body))
(im (let [x 1])
(println x)
(let [y 2])
(println y)
(println (+ x y)))
KGRlZm4gaW0tc3RtdHMgW3N0bXRzXQogIChjb25kCiAgICAoZW1wdHk/IHN0bXRzKSBgbmlsCgogICAgKGFuZCAoc2VxPyAoZmlyc3Qgc3RtdHMpKQogICAgICAgICAoPSAnbGV0IChmZmlyc3Qgc3RtdHMpKSkKICAgIGAobGV0IH4oc2Vjb25kIChmaXJzdCBzdG10cykpCiAgICAgICB+QChpbS1zdG10cyAocmVzdCBzdG10cykpKQoKICAgIHRydWUgYChkbyB+KGZpcnN0IHN0bXRzKSB+KGltLXN0bXRzIChyZXN0IHN0bXRzKSkpKSkKCihkZWZtYWNybyBpbSBbJiBib2R5XQogIChpbS1zdG10cyBib2R5KSkKCihpbSAobGV0IFt4IDFdKQogICAgKHByaW50bG4geCkKICAgIChsZXQgW3kgMl0pCiAgICAocHJpbnRsbiB5KQogICAgKHByaW50bG4gKCsgeCB5KSkp