How does clojure.walk/walk work for deeply nested data structures?

I recently used walk (well, prewalk) for traversing large trees of hiccup data. It works pretty much how you would expect: recursively applying the functions you pass in to each leaf until it hits something with no children. Prewalk & postwalk are specific variations on this.

In the same namespace, there’s prewalk-demo and postwalk-demo for getting a kind of visualization of how the prewalk/postwalk functions get applied.