Re: parallel iteration

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

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 ph...@telenet.be wrote: On 24/03/2009 1:06, pmf wrote: On

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 rowdy.redn...@gmx.net Thanks guys, these solutions look much better already. But do I

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 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

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 : make a

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? seq

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

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

Re: parallel iteration

2009-03-23 Thread pmf
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