Nice link - many thanks On 9 July 2011 17:27, Benny Tsai <benny.t...@gmail.com> wrote:
> Hi Colin, > > Sorry, a bit late to the party here, but it might be worth taking a look > at Jeffrey Straszheim's c.c.graph library to see one way of modeling DAG's > and implementing various graph operations (such as topological sort and > computing strongly connected components) in Clojure: > > API: http://clojure.github.com/clojure-contrib/graph-api.html > Source: > https://github.com/clojure/clojure-contrib/blob/master/modules/graph/src/main/clojure/clojure/contrib/graph.clj > > Note that in the library, graphs are represented by a directed-graph struct > (defined at the top of the source file) with two fields: > > - nodes: a collection of the nodes in the graph > - neighbors: a function that takes a node and returns a collection of that > node's neighbors > > Since Clojure maps are also functions that will return the value associated > with a key when called with the key, neighbors can simply be a map of nodes > to collections of neighbors. > > records are now recommended over structs, so it may be better to define a > directed-graph record: > > (defrecord directed-graph [nodes neighbors]) > > A graph (for example, a graph of two nodes :a and :b that are connected to > each other) can then created via: > > (def my-graph (directed-graph. [:a :b] {:a [:b], :b [:a]})) > > records can be used in exactly the same way as structs, so this can be used > right away with all the functions defined in the library. > > Hope this helps! > > -- > 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