> [snip]
>
> You are "accumulating" a result, which hints us at 'reduce.
> And 'for provides the nested enumeration:
>
> (defn floyd-warshall2 [{:keys [nodes distances]}]
>   (reduce (fn [[distances prevs] [k x y]]
>             (let [d (+ (distances [x k] Double/POSITIVE_INFINITY)
>                       (distances [k y] Double/POSITIVE_INFINITY))]
>             (if (< d (distances [x y] Double/POSITIVE_INFINITY))
>               [(assoc distances [x y] d) (assoc prevs [x y] k)]
>               [distances prevs])))
>     [distances {}] (for [k nodes x nodes y nodes] [k x y])))
>
> You should refrain from using indices or counters: most of the time, you can
> directly test a sequence. Why to maintain a counter to know whe you reach
> the end of a coll when (seq s) gives us this information and (next s)
> "decrements" the counter. 
> (seehttp://clj-me.blogspot.com/2009/05/counting-without-numbers.html)
>
> Christophe

Hey, thanks.

Now that's elegant and short.
I would never thought of doing reduce with different argument types
(somehow it always seemed to me reduce is only for binary arithmetical
operations like + and *).

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

Reply via email to