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))