tree-seq

functionsince v0.0-927 clojure.core/tree-seqEdit
(tree-seq branch? children root)

Details:

Returns a lazy sequence of the nodes in a tree, via a depth-first walk.

branch? must be a function of one argument that returns true if passed a node that can have children (but may not).

children must be a function of one argument that returns a sequence of the children. children will only be called on nodes for which branch? returns true.

root is the root node of the tree.


Source docstring:
Returns a lazy sequence of the nodes in a tree, via a depth-first walk.
branch? must be a fn of one arg that returns true if passed a node
that can have children (but may not).  children must be a fn of one
arg that returns a sequence of the children. Will only be called on
nodes for which branch? returns true. Root is the root node of the
tree.
Source code @ clojurescript:src/main/cljs/cljs/core.cljs
(defn tree-seq
  [branch? children root]
   (let [walk (fn walk [node]
                (lazy-seq
                 (cons node
                  (when (branch? node)
                    (mapcat walk (children node))))))]
     (walk root)))