Hey Jason, Thanks for the suggestions. Going slightly OT here to describe my motivations, but you did ask for more details ! :)
I wrote a little blog post + lib last month using Stuart Sierra's Flow (much like Graph) to implement the steps in doing a very simple discrete inference task. Its demonstrating the same thing you talk about in your post about declarative computation - here the point is that you can efficiently update your inference based new data on account of having the graph structure to work over. Here's the post http://boss-level.com/?p=160 and a literate version of the code http://ejackson.github.com/inflow/ This is my original motivation. What I'm doing there is 'building-up' the computation over time, so I start with a graph with just the input data, and end up with a graph with the input and output. But the 'building up' is not the principal hangup I have: I'm happy to have an in- and out- map. The problem is, when On Thursday, 7 February 2013 16:51:31 UTC, Jason Wolfe wrote: > > Hi Edmund, > > Thanks for your interest. There's actually no way to fill in ??? in your > example, because it's a requirement of Graph that node names must be > unique, and distinct from top-level input keys. This ensures that the > Graph has a unique topological order, and it's always clear where the input > to a node comes from. So we can't both treat :a as an input and an output. > (Of course, we could always wrap the graph function to merge the inputs > in, but it still won't quite fit your example) > > Here are three ways to do something similar: > > ;; As a single fnk that returns an explicit map > user> ((eager-compile {:a2 (fnk [[:a1 b]] {:b b :c (inc b)})}) > {:a1 {:b 1}}) > {:a2 {:b 1, :c 2}} > > ;; As a single fnk that modifies the input map > user> ((eager-compile {:a2 (fnk [[:a1 b :as a1]] (assoc a1 :c (inc b)))}) > {:a1 {:b 1}}) > {:a2 {:c 2, :b 1}} > > ;; As a hierarchical graph > user> ((eager-compile {:a2 {:b (fnk [[:a1 b]] b) > :c (fnk [[:a1 b]] (inc b))}}) > {:a1 {:b 1}}) > {:a2 {:b 1, :c 2}} > > Note that these all take input key :a1 and output :a2, to avoid a key > clash, and explicitly copy :b to the output. If you give me some more > details about your use case I may be able to provide better advice. > > Hope this helps -- let me know if you have any questions. > > Cheers, > Jason > > On Thursday, February 7, 2013 1:55:13 AM UTC-8, Edmund wrote: >> >> Hey Aria / Jason, >> >> Thanks for OSing this library, its really useful. One question: how do >> you deal with nesting on the output side of graph declaration ? I >> understand it for fnk, but but how would I achieve: >> >> {:a {:b 1}} -> {:a {:b 1, :c 2}} >> >> with a single declaration: >> >> (graph/eager-compile >> {??? (fnk [[:a b]] (inc b))} >> >> where ??? is the binding form I'm after to describe the nesting ? >> >> I'm currently doing this by breaking up my map and using update-in, but >> it seems you must have a sneaky trick to do this declaratively ? >> >> I figure [:a :c] would be an possible syntax ? >> >> Thanks again, >> >> Edmund >> On Tuesday, 29 January 2013 18:46:54 UTC, Aria Haghighi wrote: >>> >>> Hey all, >>> >>> Prismatic has open-sourced our Plumbing and Graph library on >>> github<https://github.com/prismatic/plumbing>. >>> Jason Wolfe gave a >>> talk<http://blog.getprismatic.com/blog/2012/10/1/prismatics-graph-at-strange-loop.html>about >>> how we use graph for systems composition at Strange loop last year. >>> Please give the library >>> a whirl and let us know if you're using it and if you find any issues or >>> feature requests. We use this library very heavily throughout our code and >>> hope others find it useful as well. >>> >>> Best, Aria >>> >> -- -- 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 unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.