<p><span class="h-card" translate="no"><a href="https://oldbytes.space/@amoroso" class="u-url mention">@<span>amoroso</span></a></span> <span class="h-card" translate="no"><a href="https://mastodon.social/@shriramk" class="u-url mention">@<span>shriramk</span></a></span> </p><p>"The fully parenthesized Cambridge Polish syntax of Lisp, originally regarded as a temporary expedient to be<br />replaced by more conventional syntax, possesses a peculiar virtue: A read procedure can parse it without<br />knowing the syntax of any expressions, statements, definitions, or declarations it may represent. The result of<br />that parsing is a list structure that establishes a standard representation for uninterpreted abstract syntax<br />trees.<br />This representation provides a convenient basis for macro processing, which allows the programmer to<br />specify that some simple piece of abstract syntax should be replaced by some other, more complex piece of<br />abstract syntax. As is well-known, this yields an abstraction mechanism that does things that procedural<br />abstraction cannot, such as introducing new binding structures.<br />The existence of that standard representation for uninterpreted abstract syntax trees soon led Lisp to a<br />greater reliance upon macros than was common in other high-level languages."</p><p>- William D. Clinger and Mitchell Wand, "Hygienic macro technology", HOPL 2020</p>