logos.walk reference
Copy Markdown
Every public, documented Var in logos.walk, pulled live from its own docstring, each with a real, freshly-evaluated example and its own source. For prose/narrative explanation and worked examples, see the language reference; for everything else generated (the overview, special forms, primitives, and every other stdlib namespace), see the other pages in this "Stdlib Reference" section.
postwalk
fn -- (postwalk f form)
Recursively transforms form bottom-up: f runs on each node's own children first, then on the (already-transformed) node itself.
Example:
(require '[logos.walk :as walk])
(walk/postwalk (fn [x] (if (number? x) (inc x) x)) [1 [2 3]])
;;=> [2 [3 4]]Source:
(defn postwalk
[f form]
(logos.walk/walk (fn [x] (logos.walk/postwalk f x)) f form))prewalk
fn -- (prewalk f form)
Recursively transforms form top-down: f runs on each node first, then descends into its (already-f-applied) children.
Example:
(require '[logos.walk :as walk])
(walk/prewalk (fn [x] (if (number? x) (inc x) x)) [1 [2 3]])
;;=> [2 [3 4]]Source:
(defn prewalk
[f form]
(logos.walk/walk (fn [x] (logos.walk/prewalk f x)) identity (f form)))walk
fn -- (walk inner outer form)
The base of clojure.walk: maps inner over form's own elements (rebuilding the same kind of collection) before applying outer to the result; a non-collection form goes straight to outer unchanged. See this file's header comment for the map/sorted- collection caveat.
Example:
(require '[logos.walk :as walk])
(walk/walk identity identity [1 2 3])
;;=> [1 2 3]Source:
(defn walk
[inner outer form]
(cond
(map? form) (outer (into {} (map inner (to-list form))))
(vector? form) (outer (list->vector (map inner (to-list form))))
(set? form) (outer (into #{} (map inner (to-list form))))
(list? form) (outer (map inner form))
true (outer form)))