deep-clone-and-recursive-merge
Clojure
(defn deep-clone
"Recursively copies maps, vectors, sets and seqs into fresh collections."
[x]
(cond
(map? x) (into (empty x) (map (fn [[k v]] [k (deep-clone v)])) x)
(vector? x) (mapv deep-clone x)
(set? x) (into (empty x) (map deep-clone) x)
(seq? x) (doall (map deep-clone x))
:else x))
(defn deep-merge
"Recursively merges maps b into a; other values from b replace those in a."
[a b]
(if (and (map? a) (map? b)) (merge-with deep-merge a b) b))