Tassilo! Thank you very much, really grand job! By the way, I was preparing this example for students. So, you've done all the work for me! :)
Best regards, Ru On 26 сен, 22:31, Tassilo Horn <tass...@member.fsf.org> wrote: > Hi again, > > just for the fun of doing it, here's a recursive version of infix: > > --8<---------------cut here---------------start------------->8--- > (defmacro infix [x] > (if (sequential? x) > `(~(second x) (infix ~(first x)) (infix ~(nth x 2))) > x)) > --8<---------------cut here---------------end--------------->8--- > > That works fine no matter if you use vectors or lists, because I simply > pick the operator and the 2 args manually. > > I think it's educational to follow a complete macroexpansion process. > Here's an example: > > --8<---------------cut here---------------start------------->8--- > (let [a 3, b 2, c 3] > (infix ((a * b) + [c * c]))) > > Expands to: > (let* [a 3 b 2 c 3] > (+ (infix (a * b)) (infix [c * c]))) > > Expands to: > (let* [a 3 b 2 c 3] > (+ (* (infix a) (infix b)) (infix [c * c]))) > > Expands to: > (let* [a 3 b 2 c 3] > (+ (* a (infix b)) (infix [c * c]))) > > Expands to: > (let* [a 3 b 2 c 3] > (+ (* a b) (infix [c * c]))) > > Expands to: > (let* [a 3 b 2 c 3] > (+ (* a b) (* (infix c) (infix c)))) > > Expands to: > (let* [a 3 b 2 c 3] > (+ (* a b) (* c (infix c)))) > > Finally, expands to: > (let* [a 3 b 2 c 3] > (+ (* a b) (* c c))) > --8<---------------cut here---------------end--------------->8--- > > HTH, > Tassilo -- 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