On 13.05.2009, at 08:32, Konrad Hinsen wrote:

> I have done exactly that recently when writing clojure.contrib.macro-
> utils, which contains a full macro expansion engine because that's
> the only way to implement symbol macros and local macros. It was an
> interesting exercice in macro programming.

It just occurred to me that local macros are probably a very good way  
for implementing the kind of optimization you have in mind:

        (macrolet [(fn + [& ops] ...)]
           (expr1)
           (expr2)
           ...)

takes care of not touching occurrences of + that should be left as  
is, and correctly interacts with other macros. Inside the (fn + ...),  
you just have to make sure that your output forms use clojure.core/+  
instead of an unqualified +, to prevent the macro from being executed  
in an endless loop. Using a local macro will even make sure that +  
passed as a parameter to other functions is not touched. The only  
limitation is that code using clojure.core/+ explicitly is not  
modified. This may well be an advantage, as it provides an escape  
mechanism from optimization.

Konrad.


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to 
clojure+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to