I'm not sure where I picked it up, but I remembered the arguments being called &form and &env, and googling for "clojure &form &env" led me to: http://groups.google.com/group/clojure/browse_thread/thread/d710c290b67951a3/b827d46389110f26?lnk=gst&q=clojure+macro+%26env#b827d46389110f26 :
"&form contains the form how the *macro* was called. *&env* contains local bindings in the *macro* environment. (At least this is what my little test shows...) These magic parameters are given to all parameters, but usually hidden. It's probably safe to ignore them if you don't know what they really do." -- Eivind Magnus Hvidevold Cell: +47 926 78 423 On Sat, Oct 2, 2010 at 8:41 AM, Stefan Rohlfing <[email protected]>wrote: > @Jürgen and Chris > > Thank you very much for helping me enlarge my understanding of macros! > > I realize that learning the subtleties of a macro implementation is > not easy but well worth the effort. > > It is also quite interesting that a macro as it seems takes two > implicit extra arguments. I am curious what these arguments might be > and hope someone can tell us. > > Stefan > > > Actually, it's not. That's becuase the compiler inserts a couple of > > extra implicit arguments to all calls to macros. So in fact, my-infix, > > at runtime, expects 3 arguments. Check this out: > > > > user=> (defmacro foo [x] x) > > #'user/foo > > user=> (foo 23) > > 23 > > user=> (def foo2 (var-get #'foo)) > > #'user/foo2 > > user=> (foo2 23) > > java.lang.IllegalArgumentException: Wrong number of args (1) passed > > to: user$foo (NO_SOURCE_FILE:0) > > user=> (foo2 23 34 45) > > 45 > > > > I hope that makes it clearer. I certainly feel like I understand > > macros a little better after figuring this out. > > > > As for what exactly the two implicit args to macros are - I don't > > know. Someone else will have to explain that. > > > > - Chris > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to [email protected] > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > [email protected]<clojure%[email protected]> > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to [email protected] Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/clojure?hl=en
