Growing a DSL with Clojure by Ambrose Bonnaire-Sergeant.
From the post:
From seed to full bloom, Ambrose takes us through the steps to grow a domain-specific language in Clojure.
Lisps like Clojure are well suited to creating rich DSLs that integrate seamlessly into the language.
You may have heard Lisps boasting about code being data and data being code. In this article we will define a DSL that benefits handsomely from this fact.
We will see our DSL evolve from humble beginnings, using successively more of Clojure’s powerful and unique means of abstraction.
You know, the “…code being data and data being code” line reminds me of DATATAG in ISO 8879 (SGML).
I suspect this gets us keys being first class citizens but that will have to await another post.