--On 22 mars 2014 04:18:03 -0400 Neil Van Dyke <[email protected]> wrote:
One tip for writing macros: make your transformer pattern variables be all-uppercase. This convention makes reading and writing macros much easier for humans, and also less confusing to learn (because people seeing examples are less confused over what is a pattern variable and what is a normal Racket variable).
That sounds like very useful advice, but does anyone follow it? I haven't seen this convention used in any Racket macros I looked at.
A few words on this from my own experience coming to Racket from a Clojure background. For those not familiar with Clojure, its macro system is pretty close to Common Lisp, with a few interesting and useful differences that I won't go into here.
My experience is that Racket macros are way more powerful if you want to do a serious job. Doing a serious job means writing macros that behave like syntax features of a language. It means in particular that macros should do syntax checking and report errors in an understandable way. In the Clojure (and CL) world, few macros do syntax checking at all, and those that do just give up in case of an error, with a message that becomes clear only after one reads the macro source code.
Unfortunately, that power comes with a steep learning curve, which isn't helped by the lack of good tutorials. The Racket documentation is perfectly clear and complete, but it requires a serious motivation.
The biggest problem I had in practice was exactly with pattern variables, so I really like your advice given above. It is important to keep track of each symbol's status, pattern variable or plain bound symbol, in order to understand a syntax-parse macro.
Konrad. ____________________ Racket Users list: http://lists.racket-lang.org/users

