Lisp Macros, Delayed Evaluation and the Evolution of Smalltalk
One of the examples was a way to build your own , which most languages have built in, but Smalltalk famously implements in the class library: there is an message that takes two blocks (closures) as parameters. The Clojure macro example worked almost exactly the same way, but where Smalltalk uses blocks to delay evaluation, the example used macros. Smalltalk did not have a macro mechanism, and it no longer had the Smalltalk-72 token-stream where un-evaluated “arguments” came for free, so yes, there “had” to be some sort of mechanism for unevaluated arguments.
Source: blog.metaobject.com