@Rowdy Take the time to do the interleave example by hand. You'll it does exactly what you want in one pass.
On Mar 24, 10:10 am, Rowdy Rednose <rowdy.redn...@gmx.net> wrote: > Thanks guys, these solutions look much better already. > > But do I always have to have these 2 steps > * merge collection > * split collection > > It feels a bit inefficient, I don't know if it actually is, though. > > On Mar 24, 8:05 pm, Phlex <ph...@telenet.be> wrote: > > > On 24/03/2009 1:06, pmf wrote: > > > > On Mar 24, 12:01 am, Rowdy Rednose<rowdy.redn...@gmx.net> wrote: > > > >> Hi group, > > > >> say I have 2 sequences > > > >> (def seq-a '("a1" "a2" "a3")) > > >> (def seq-b '("b1" "b2" "b3")) > > > >> and want to iterate over them in parallel, like this > > > >> (par-doseq [a seq-a b seq-b] (prn a b)) > > > >> which should print > > > >> "a1" "b1" > > >> "a2" "b2" > > >> "a3" "b3" > > > > A combination of the interleave and partition functions would probably > > > do what you want: > > > > (partition 2 (interleave [:a :b :c] [:d :e :f])) > > > > (Wrap it in a doall to force your side effects.) > > > Another one : > > > (doseq [[a b] (map vector '(1 2 3) '(a b c))] > > (println a b)) > > > (defmacro par-doseq [bindings & body] > > (let [bindings (partition 2 bindings)] > > `(doseq [~(vec (map first ,bindings)) (map vector ~@(map second > > ,bindings))] > > ~...@body))) > > > cara.nio.echo=> (par-doseq [a '(1 2 3) b '(a b c)] (println a b)) > > 1 a > > 2 b > > 3 c > > nil > > > Sacha --~--~---------~--~----~------------~-------~--~----~ 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 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 -~----------~----~----~----~------~----~------~--~---