On Jul 27, 11:11 am, Alan Malloy <a...@malloys.org> wrote: > On Jul 27, 5:50 am, Feng Shen <shen...@gmail.com> wrote: > > > Clojure core.clj has a macro when-let, > > I am wondering how to write a macro `when-lets` > > > (when-lets [symbol-1 test-1 > > symbol-2 test-2 > > ... > > ] > > body > > ) > > > body only get evaluated when (and test-1 test-2 ....) > > I am thinking about it, anybody has any clue? > > (defmacro when-lets [tests & body] > (reduce (fn [body test] > `(when-let ~(vec test) > ~body)) > `(do ~@body) > (partition 2 (reverse tests)))) > > This would be cleaner if we had foldr in the language already - I find > myself wanting it quite often for macros like this.
Sorry, should of course be (defmacro when-lets [tests & body] (reduce (fn [body test] `(when-let ~(vec test) ~body)) `(do ~@body) (reverse (partition 2 tests)))) Apparently the reason I want foldr is because I get it wrong when I do it myself. -- 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