This is an implementation of John Cowan's tree library with the following additional procedures added.
(tree-find pred tree default)
Walks the tree in preorder and exits out early when a node (a subtree or atom) matches pred. Returns the first matching node, not a copy but the real one. If there is on match, return default, which is a mandatory argument.
(tree-find-equal? tree needle)
Like tree-find, but finds the first node that's equal? to the needle or returns #f as a default.
The reason you might need that is because many of the other operations in the library act on subtrees, not copies of subtrees. So this is a way for you to turn a copy into a reference to the original subtree.
(tree-atoms-any? pred tree)
Like tree-any?, but only consider atoms.
(tree-atoms-every? pred tree)
Like tree-every?, but only consider atoms.
(tree-remove pred tree)
Remove every node (whether subtrees or atoms) that matches pred.