Zurück Weiter Inhalt

2.4 Tree

Das Mudule Tree definiert die Datenstruktur eines Baumes, welcher benutzt wird, um die XMLNodes zu speichern.

Es existiert in HXML noch ein zweites Module NTree, dieses definert einen navigierbaren Baum, wird aber nirgends verwendet.

Die Definition von Tree lautet:

data Tree a = Tree a [Tree a]

Ein Baum besteht aus Elementen. Diese Elemente fassen jeweils ein a und eine Liste von Elementen. Die Elemente werden mit einem Konstruktur mit Namen Tree erzeugt.

Es werden folgenden Funktionen auf Tree definiert.

Den Inhalt des Rootelements:

treeRoot :: Tree a -> a
treeRoot (Tree a _) = a

Eine Liste aller Kinder:

treeChildren :: Tree a -> [Tree a]
treeChildren (Tree _ c) = c

Ein Blatt erzeugen:

leafNode :: a -> Tree a
leafNode x = Tree x [ ]

mapTree ist mit map für Listen vergleichbar. Es wird eine Funktion (a -> b) auf alle Elemente des Baumes Tree a angewand. Ergebnis ist ein strukturell gleicher Baum Tree b:

mapTree :: (a -> b) -> Tree a -> Tree b
mapTree f (Tree a c) = Tree (f a) (map (mapTree f) c)

foldTree ist die Analogie zu foldr. Alle Elemente des Baumes Tree a werden mittels der Funktion (a -> b -> c) miteiander verknüpft. b ist Startwert und wird durch die Funktion (c -> b-> -> b) aktualisiert. Ergbnis ist vom Typ c. Damit ist es z.B. möglich, einen Baum zu einer String-Repräsentation zu konvertieren. (a -> b -> c) müsste aus jedem a einen String machen:

foldTree :: (a -> b -> c) -> (c -> b -> b) -> b -> Tree a -> c
foldTree tree cons nil (Tree a c) = tree a (foldr cons nil (map (foldTree tree cons nil) c))

(a -> b -> c) : Berechnet Ergebnis c von aktuellem Element a
(c -> b -> b) : aktualisiert Status b
b : Status
Tree a : zu kombinierende Werte
c : Rückgabewert


Zurück Weiter Inhalt