Hi, > I wrote few apps with clojure. I have used many times macro to expand > expressions and change some control flows. I thought that I know > macros, but now I know that doing some programming by analogy is not > enough. In fact I still don't know the macros works, I don't know when > and how is evaluated and how symbols are evaluated. Problem below is > something which I'm not able to solve with my current "knowledge". > > Let say that I wrote macro map-fnc > > and I want to use it like > > (map-fnc (function1 [] "hello") > (function2 [a] (println a)) ) > > The result is map in which keys are names of methods as strings and > body is a function with proper arity. > So I can evalutate this: > > > ((get (map-fnc (function1 [] "hello") > (function2 [a] (println a)) ) "function1")) > > or this > > > ((get (map-fnc (function1 [] "hello") > (function2 [a] (println a)) ) "function2") "hello world") > > Any help?! I belive that solving this problem might give me more > insight on how macro works.
I might write it like this - (defmacro map-fnc [& fn-specs] (let [fn-names (map (comp str first) fn-specs) fn-decls (map #(cons 'fn (rest %)) fn-specs) fn-map (zipmap fn-names fn-decls)] `~fn-map)) See if that works for you. Regards, BG -- Baishampayan Ghose b.ghose at gmail.com -- 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 Note that posts from new members are moderated - please be patient with your first post. 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