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 [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.