foldrNaryTree

foldrNaryTree :: b -> (a -> [b] -> b) -> NaryTree a -> b
foldrNaryTree leaf node Leaf = leaf
foldrNaryTree leaf node (Node a nodes) = node ((\x -> x) a)
                                              (map (foldrNaryTree leaf node) nodes)
    

Alle Knoten im Baum kann man dann zählen mit

countNaryTree = foldrNaryTree 0 (\x xs -> 1 + sum xs)
    

Zum Beispiel:

tree1 = Node "top" [Node "below-top1" [], Node "below-top2" []]

ct1 = countNaryTree tree1 -- 3
    

Die folgende Funktion wandelt einen Baum in eine Liste um:

flattenNaryTree = foldrNaryTree [] (\x xs -> x:(concat xs))
    

Martin Gasbichler
Last modified: Fri Jun 6 08:31:33 MST 2003