Oh that makes sense. Thanks a lot!
On Thu, Sep 11, 2014 at 1:36 AM, Carlo Zancanaro <[email protected]>
wrote:
> Hey Greg,
>
> On Thu, Sep 11, 2014 at 12:30:11AM -0700, Greg MacDonald wrote:
> > So how come two agents can't contain one another? The following code
> causes
> > a StackOverflowError. In the real world things can't contain other things
> > cyclically so I suspect that's why, but if someone could explain this
> > better to me I'd appreciate it. :) - Greg
> >
> > (defn test-agents
> > []
> > (let [a (agent {})
> > b (agent {})]
> > (send-off a #(assoc %1 :other %2) b)
> > (send-off b #(assoc %1 :other %2) a)))
>
> As far as I can tell this works properly, but printing it is a problem
> (as it's a structure with a cycle in it: a -> b -> a -> b -> ... a).
>
> We can see that it works, though:
>
> user=> (defn test-agents []
> (let [a (agent {:a true}),
> b (agent {:b true})]
> (send-off a assoc :other b)
> (send-off b assoc :other a)
> [a b]))
> #'user/test-agents
> user=> (def ag (test-agents))
> #'user/ag
> user=> (:a @(first ag))
> true ;; the "first" one is a
> user=> (:b @(:other @(first ag)))
> true ;; a's "other" is b
> user=> (:a @(:other @(:other @(first ag))))
> true ;; b's "other" is a
>
>
> Carlo
>
--
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/d/optout.