Re: use pmap but ensure that original ordering is retained?

2012-08-11 Thread Ben Smith-Mannschott
Yes, pmap behaves as map with respect to the ordering of the elements
of the resulting sequence.

// ben

On Sat, Aug 11, 2012 at 9:29 PM, Jim - FooBar();  wrote:
> Hi all,
>
> I was wondering what assumptions does pmap take with regards to the ordering
> of the resulting seq? Can I assume it retains the original ordering or does
> it just cons whatever future returns earlier? In other words can I do this
> and feel safe?
> ---
>
> (defn min-max [root? depth dir board]
> (if (zero? depth) (score b) ;reached bottom level - evaluate board
> (let [mapper (if root? 'pmap 'map) ;if at root-node create futures
>   team   (filter #(= dir (:direction %)) board) ;all the team-mates
> (with same direction)
>   successors (concat (map #(core/getMoves %) team)) ;concat all
> potential moves
>   result (->> successors
>  (map core/try-move)  ;try them all (producing boards)
>  (mapper (partial min-max false (dec depth) (- dir];pass the
> resulting boards back to recursion with direction inverted
> (get (vec successors)
>   (.indexOf result (apply max result))
>
> (def search (partial min-max true))
> 
>
> It seems to me like a very succinct and idiomatic way to implement the
> min-max algorithm, the only problem is this line:
> (get (vec successors)  (.indexOf result (apply max result)))
>
> It assumes that the initial ordering of moves ('successors') has been
> preserved  throughout the recursion and so I can use .indexOf to go from the
> score back to the move that started it all! Is this the case? I am
> suspecting not! any suggestions?
>
> Thanks in advance,
>
>
> Jim
>
> --
> 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 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


use pmap but ensure that original ordering is retained?

2012-08-11 Thread Jim - FooBar();

Hi all,

I was wondering what assumptions does pmap take with regards to the 
ordering of the resulting seq? Can I assume it retains the original 
ordering or does it just cons whatever future returns earlier? In other 
words can I do this and feel safe?

---

(defn min-max [root? depth dir board]
(if (zero? depth) (score b) ;reached bottom level - evaluate board
(let [mapper (if root? 'pmap 'map) ;if at root-node create futures
  team   (filter #(= dir (:direction %)) board) ;all the 
team-mates (with same direction)
  successors (concat (map #(core/getMoves %) team)) ;concat all 
potential moves

  result (->> successors
 (map core/try-move)  ;try them all (producing boards)
 (mapper (partial min-max false (dec depth) (- 
dir];pass the resulting boards back to recursion with direction inverted

(get (vec successors)
  (.indexOf result (apply max result))

(def search (partial min-max true))


It seems to me like a very succinct and idiomatic way to implement the  
min-max algorithm, the only problem is this line:

(get (vec successors)  (.indexOf result (apply max result)))

It assumes that the initial ordering of moves ('successors') has been 
preserved  throughout the recursion and so I can use .indexOf to go from 
the score back to the move that started it all! Is this the case? I am 
suspecting not! any suggestions?


Thanks in advance,


Jim

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