I agree that it probably doesn't need to be a macro (your second suggestion was my first inclination).
I didn't realize doseq took keyword options, that's good to know. On Saturday, June 9, 2012 at 7:51 PM, Walter Tetzner wrote: > > Is there a philosophical difference underlying the syntax difference (doseq > > [elem coll] (f coll)) and (each f coll)? > > > `doseq' is the side-effecty version of `'for', not map. It lets you do things > like > > user> (doseq [x (range 100) > :while (< x 20) > :when (even? x)] > (println x)) > 0 > 2 > 4 > 6 > 8 > 10 > 12 > 14 > 16 > 18 > > If you want a side-effecty version of map, I would avoid the macro suggested > earlier, and just do > > (def each (comp dorun map)) > > or > > (defn each [f coll] (doseq [x coll] (f x))) > > -Walter > > On Sat, Jun 9, 2012 at 5:08 PM, David Jacobs <da...@wit.io > (mailto:da...@wit.io)> wrote: > > Thanks, guys. > > > > I know there are easy ways to implement what I want. However, I'm more > > curious as to why the language itself doesn't support this style of mapping > > side-effects. > > > > In other words, why does doseq not follow map's lead here. Is there a > > philosophical difference underlying the syntax difference (doseq [elem > > coll] (f coll)) and (each f coll)? > > > > It seems to me that the side-effecty nature of (doseq) isn't quite enough > > to justify the syntax difference between map and doseq. I guess one could > > say that because doseq is built for side-effects, which are often > > multiline, doseq should easily accept multiline statements. However, my > > imaginary each macro could do the same: (each #(do … …) coll). > > > > What am I missing? > > > > Thanks! > > David > > > > On Friday, June 8, 2012 at 7:00 AM, Lars Nilsson wrote: > > > > > On Fri, Jun 8, 2012 at 9:54 AM, Allen Johnson <akjohnso...@gmail.com > > > (mailto:akjohnso...@gmail.com) (mailto:akjohnso...@gmail.com)> wrote: > > > > Combine map with dorun and you get the same effect: > > > > > > > > (dorun (map println logs)) > > > > > > > > http://clojure.github.com/clojure/clojure.core-api.html#clojure.core/dorun > > > > > > > > Allen > > > > > > > > On Thu, Jun 7, 2012 at 11:32 PM, David Jacobs <da...@wit.io > > > > (mailto:da...@wit.io) (mailto:da...@wit.io)> wrote: > > > > > I would love to have a version of doseq that works like map (similar > > > > > to > > > > > "each" in other dynamic languages). In other words, instead of (doseq > > > > > [log > > > > > logs] (println log)), I would say something like (each println logs). > > > > > > > > > > Is there a built-in Clojure method that works like this? > > > > > > Not a built-in, but... > > > > > > (defmacro for-each [f x] `(doseq [item# ~x] (~f item#))) > > > > > > I suppose this solution is blindingly obvious though. > > > > > > Also, I would be curious if there's any significant performance > > > difference using (dorun (map ...)) as I assume an intermediate result > > > is built and then thrown away. Or perhaps it's insignificant compared > > > to what the unspecified function does that is passed to map for > > > performing the side-effect work.. > > > > > > Lars Nilsson > > > > > > -- > > > 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 > > > (mailto:clojure@googlegroups.com) (mailto: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 > > > (mailto:clojure%2bunsubscr...@googlegroups.com) > > > (mailto:clojure+unsubscr...@googlegroups.com > > > (mailto:clojure%2bunsubscr...@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 post to this group, send email to clojure@googlegroups.com > > (mailto: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 > > (mailto:clojure%2bunsubscr...@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 post to this group, send email to clojure@googlegroups.com > (mailto: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 > (mailto: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 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