[Haskell-cafe] How to get all the paths of a tree

Tomasz Zielonka tomasz.zielonka at gmail.com
Mon Sep 19 09:05:54 EDT 2005


On Mon, Sep 19, 2005 at 12:52:47PM +0200, Rene de Visser wrote:
> -- This function can effectively only be used bottom up, because the only  input
> -- parameter to func comes from the call "(map (treeFold func))", i.e. the rest of
> -- the tree. We can only tell when are are at a leaf ( [b] is empty ).
> -- Add in the other tree fold here!
> treeFold :: (a -> [b] -> b) -> Tree a -> b
> treeFold func (Node header list) = func header (map (treeFold func) list)

You can define paths with treeFold in this way:

paths t =
    treeFold
        (\a fs p ->
            let p' = p ++ [a] in
            if null fs
                then [p']
                else concatMap ($ p') fs)
        t
        []

So treeFold can be used top-down :-)

Best regards
Tomasz


More information about the Haskell-Cafe mailing list