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.