Skip to content

Instantly share code, notes, and snippets.

@mkremins
Last active August 29, 2015 13:55
Show Gist options
  • Save mkremins/8760717 to your computer and use it in GitHub Desktop.
Save mkremins/8760717 to your computer and use it in GitHub Desktop.
Clojure utility fns for working with zippers
(require '[clojure.zip :as z])
(defn forms-zip
"Returns a clojure.zip zipper over a tree of Clojure forms."
[form]
(z/zipper coll?
#(if (map? %) (interleave (keys %) (vals %)) (seq %))
#(cond
(map? %1) (apply hash-map %2)
(seq? %1) %2
(vector? %1) (vec %2))
form))
(defn zip-seq
"Returns a depth-first lazy sequence of locations in zipper `zip`."
[zip]
(when-not (z/end? zip)
(cons zip (lazy-seq (zip-seq (z/next zip))))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment