(defmacro block ([] `nil) ([hd & tl] (if (and (seq? hd) (#{'let 'let*} (first hd))) `(let ~(second hd) (block ~@tl)) `(do ~hd (block ~@tl))))) ; (use 'clojure.walk) (println (macroexpand-all ' (block (let [x 1]) (let [y 2]) (println (+ x y)) (let [z 3]) (println (+ x y z))) ; ))