Thank you all for your input. I think I will follow Stuart's advice
and go with something like the following, again using the example data
above.
(use 'clojure.set)
(def policies (ref #{{:id 3 :name "x" :holder 7 :vehicle 11}
{:id 4 :name "y" :holder 2 :vehicle
12}}))
(def vehicles (ref #{{:id 11 :make "Audi" :driver 7}
{:id 12 :make "Toyota" :driver 2}}))
(def people (ref #{{:id 7 :name "Brenton"}
{:id 2 :name "John"}}))
(defn find-policy [id]
(first (select #(= (:id %) id) policies)))
(defn get-field [map key table]
(first (select #(= (:id %) (key map)) table)))
(defn get-holder [policy]
(get-field policy :holder people))
(defn get-driver [vehicle]
(get-field vehicle :driver people))
(defn get-vehicle [policy]
(get-field policy :vehicle vehicles))
This feels very natural to use
(def p (find-policy 3))
(-> p get-vehicle get-driver)
I may consider using clj-record since it just uses macros to create
these kinds of functions for you.
Thanks again,
Brenton
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---