2013/7/5 Mikera <mike.r.anderson...@gmail.com>: > I really like the as-> macro for this kind of thing. > > (as-> (something) x > (if (test1 x) (transform1 x) x) > (if (test2 x) (transform2 x) x) > (do-something-else-with x y) > (if (test3 x) (transform3 x) x)) > > Advantages: > - It's part of core in 1.5 > - It's a macro and compiles down to efficient code > - You can easily mix in other kinds of transforms (as demonstrated above)
Yep, indeed with as-> you can do this without repeating x as in the let bindings, that's already better. Is and-as-> a combo of some-> and as-> ? (in which case, could be be named some-as-> ?) > > I also wrote a variant of this in my clojure-utils library that is very > useful: the "and-as->" macro does exactly the same thing but bails out early > if it finds a false or nil value. This turns out to be extremely useful for > state-transformer type algorithms where you need to backtrack if a step > doesn't succeed. > > > On Friday, 5 July 2013 13:13:05 UTC+1, Laurent PETIT wrote: >> >> hello, >> >> More often than not, I'm facing code looking like this: >> >> (let [x (if (test1 x) (transform1 x) x) >> x (if (test2 x) (transform2 x) x) >> x (if (test3 x) (transform3 x) x)] >> x) >> >> Do you know of a better way to write this with only clojure.core >> functions? >> >> So far, I've had no success with cond->, as->, etc. > > -- > -- > 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 > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/groups/opt_out. > > -- -- 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 --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.