Re: parallel iteration

2009-03-24 Thread Rowdy Rednose
Thanks all, microbenchmarking shows that a simple (time (doseq [[a b] (map vector list-a list-b)])) is ~50% faster on my system than (def par-doseq-fn (comp dorun map)) (defmacro par-doseq [bindings & body] (let [bindings (partition 2 bindings)] `(par-doseq-fn (fn ~(vec (map first b

Re: parallel iteration

2009-03-24 Thread Phlex
>> (defn par-doseq-fn [fn& seqs] >> (loop [rests seqs] >>(when (every? identity (map seq rests)) >> (apply fn (map first rests)) >> (recur (map rest rests) >> >> > It should of course be like this : > > (defn par-doseq-fn [fn& seqs] > (loop [rests se

Re: parallel iteration

2009-03-24 Thread Phlex
> (defn par-doseq-fn [fn& seqs] > (loop [rests seqs] > (when (every? identity (map seq rests)) > (apply fn (map first rests)) > (recur (map rest rests) > It should of course be like this : (defn par-doseq-fn [fn & seqs] (loop [rests seqs] (when (every?

Re: parallel iteration

2009-03-24 Thread Phlex
On 24/03/2009 15:10, Rowdy Rednose 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. Allright let's see what we can do : m

Re: parallel iteration

2009-03-24 Thread Sean
@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 wrote: > Thanks guys, these solutions look much better already. > > But do I always have to have these 2 steps > * merge collection > * split collecti

Re: parallel iteration

2009-03-24 Thread Laurent PETIT
You could define a helper function, zip (as in Haskell) : (def zip (partial map list)) and then use as showed above: (doseq [[x y] (zip [:a :b] [1 2])] (println "x: " x ", y:" y)) 2009/3/24 Rowdy Rednose > > Thanks guys, these solutions look much better already. > > But do I always have to

Re: parallel iteration

2009-03-24 Thread Rowdy Rednose
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 wrote: > On 24/03/2009 1:06, pmf wrote: > > > On Mar 24, 12:01 a

Re: parallel iteration

2009-03-24 Thread Phlex
On 24/03/2009 1:06, pmf wrote: > On Mar 24, 12:01 am, Rowdy Rednose 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))

Re: parallel iteration

2009-03-23 Thread pmf
On Mar 24, 12:01 am, Rowdy Rednose 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"

parallel iteration

2009-03-23 Thread Rowdy Rednose
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" The way I do it currently is using "map" (and "last" to