“…For example, programmers have used macros to extend Scheme with constructs for pattern matching [36], relations in the spirit of Prolog [8,30,18,23], extensible looping constructs [7,29], class systems [27,1,17] and component systems [34,14,5], among others. In addition, programmers have also used macros to handle metaprogramming tasks traditionally implemented outside the language using preprocessors or special compilers: Owens et al [26] have added a parser generator library to Scheme; Sarkar et al [28] have created an infrastructure for expressing nano-compiler passes; and Herman and Meunier [20] have used macros to improve the static analysis of Scheme programs. As a result, implementations of Scheme such as PLT Scheme [13] have a core of a dozen or so syntactic constructs but appear to implement a language the size of Common Lisp [32].…”