I've been programming agent-based models in clojure for the last 2 years,
and I've found that having a vector full of refs works fine. If two
individuals interact (in my case, form a relationship), I use dosync and
alter in a parallel environment to ensure that noone is starting more
relationships than they have capacity for).
(def world (vec (map (fn [pos] (ref (create-host (- (rand-int (* timespan
365)) (* maximum-age 365)) pos))) (range fullpopsize)))))
(defn pair-hosts [h1 h2]
(dosync
(let [keep-till (+ @day (exp-decay (table-relation reltype)))]
(alter h1 assoc :relas (vec (conj (:relas @h1) (struct relation
(:id @h2) reltype @day keep-till))))
(alter h2 assoc :relas (vec (conj (:relas @h2) (struct relation
(:id @h1) reltype @day keep-till))))
(vector h1 h2))))))
--
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