> Danny, could you maybe hack up a possible very simple example of what > you mean?
<snip> > I can not simply store a copy of the Karl person in Tinas :friends > slot, > because when Karl gets one year older, then I don‘t want to go through > all persons, looking for Karls, and have their age updated. Hi André, Your shared instance constraint does make things a little more interesting than in my application, but I think John's suggestion about not storing friend instances directly is a good thing. If you were to instead assign an id to each created person, and have each friend list be a list of ids, the entity referred to by the id can still be immutable for a given dereference. Not sure how much sense that makes, so here's something crude that I've hacked up: (def *everyone* (ref {})) (def *global-id* (ref 0)) (defn next-id [] (dosync (commute *global-id* inc))) (defstruct person :name :friend-ids :id) (defn make-person [name] (struct person name [] (next-id))) (defn make-and-add-person [name] (let [person (make-person name)] (dosync (alter *everyone* assoc (:id person) person)))) (defn befriend [person friend] (let [new-friend-list (conj (:friend-ids person) (:id friend)) new-person (assoc person :friend-ids new-friend-list)] (dosync (alter *everyone* assoc (:id person) new-person)))) The 'down side' here is simply that you refer to people by ids, rather than directly, but the up side is that a given deref of *everyone* is immutable and consistent. Cheers, Danny. -- 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