I've officially eliminated the last define-macro expression. However, I get the feeling that things may not be exactly as desired. The original program made extensive use of functions in building the macros, and I originally tried to replace these with macros. This turned out to be a little difficult to debug, however (read: I was unable to make the code actually work). I eventually abandoned this and just made datum->syntax calls.
On the one hand, this works. I also find it easier to debug, and I think it looks cleaner. The downside is that one doesn't get all the same benefits of referential transparency, so I still have gensyms in the functions etc. Is this a problem? If so, I can definitely replace everything with macros, but I might not be able to do that and get everything else done by the GSOC project deadline. I'd like to hang around after the project is officially done from Google's point of view to polish things up, so I could also do it then. Another question about module namespaces: I have some syntax that I'd like to be available to code generated by macros in my module, but which I'd rather not export to the user (to avoid clobbering their functions). Is there a standard way of doing this? I can't seem to find anything in the module documentation regarding giving namespaces to things in modules except for :renamer, which has to be done by the user--the only options appear to be not exporting it at all, or exporting it straight into the user's namespace. The best fix I can think of is naming the syntax things the user is unlikely to ever take (or maybe using gensyms to make sure it isn't a name they take).