Oh that makes sense. Thanks a lot!

On Thu, Sep 11, 2014 at 1:36 AM, Carlo Zancanaro <carlozancan...@gmail.com>
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 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/d/optout.

Reply via email to