i have been looking clojure while now, couldnt find function supply default value nested map. example if have map below,
(def paths {:a {:b 5, :d 5, :e 7}, :b {:c 4}, :c {:d 8, :e 2}, :d {:c 8, :e 6}, :e {:b 3} })
i want function creates map below, given hash-map,
{:a {:b 5, :c default_val :d 5, :e 7}, :b {:a default_val, :c 4, :d default_val, :e default_val}, :c {:a default_val, :b default_val, :c default_val, :d 8, :e 2}, :d {:a default_val, :b default_val, :c 8, :d default_val, :e 6}, :e {:a default_val, :b 3, :c 8, :d default_val, :e 3} }
from reading example it's hard tell when want default value included, though there common pattern of providing set of defaults , merging input wherever value given it's used , if it's not there particular key default value used:
user> (def default-values {:a :default :b :default :c :default :d :default}) #'user/default-values user> (def paths {:a {:b 5, :d 5, :e 7}, :b {:c 4}, :c {:d 8, :e 2}, :d {:c 8, :e 6}, :e {:b 3}}) #'user/paths user> (keys paths) (:a :d :b :c :e) user> (vals paths) ({:d 5, :b 5, :e 7} {:c 8, :e 6} {:c 4} {:d 8, :e 2} {:b 3}) user> (map #(merge default-values %) (vals paths)) ({:a :default, :d 5, :b 5, :c :default, :e 7} {:a :default, :d :default, :b :default, :c 8, :e 6} {:a :default, :d :default, :b :default, :c 4} {:a :default, :d 8, :b :default, :c :default, :e 2} {:a :default, :d :default, :b 3, :c :default}) user> (clojure.pprint/pprint (zipmap (keys paths) (map #(merge default-values %) (vals paths)))) {:e {:a :default, :d :default, :b 3, :c :default}, :c {:a :default, :d 8, :b :default, :c :default, :e 2}, :b {:a :default, :d :default, :b :default, :c 4}, :d {:a :default, :d :default, :b :default, :c 8, :e 6}, :a {:a :default, :d 5, :b 5, :c :default, :e 7}}