Shriram Krishnamurthi
Lisp programmers have long used macros to extend their language. Indeed,
their success has inspired macro notations for a variety of other
languages, such as C and Java. There is, however, a paucity of effective
pedagogic examples of macro use. This paper presents a short, non-trivial
example that implements a construct not already found in mainstream
languages. Furthermore, it motivates the need for tail-calls, as opposed to
mere tail-recursion, and illustrates how support for tail-call optimization
is crucial to support a natural style of macro-based language extension.