Baum in Liste umwandeln < Haskell < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Aufgabe | Gegeben ist der HASKELL-Datentyp för einen binären Baum: data BT = E | T BT BT, wobei E der Konstruk-
tor für den leeren Baum ist und T der Konstruktor für einen Knoten mit zwei Unterbäumen ist.
Beschreiben Sie eine HASKELL-Funktion addr::BT->Char, wobei addr t als Ergebnis die Liste der Adres-
sen des Baumes t hat. Jede Adresse ist entweder die Zeichenkette "eps" (die Adresse der Wurzel des Baumes)
oder eine Zeichenkette, die nur aus den Zeichen '0' oder '1' besteht. Damit hat der Baum T E E die Liste
["eps"] als Ergebnis.
Standard-Tesfall
addr tr == ["eps","1","10","11"]
tr= T E (T (T E E) (T E E))
data BT = E | T BT BT deriving(Show)
addr::BT->Char
|
Hi....
hab mich damit mal beschäftigt und folgenden Ansatz implementiert:
data BT = E | T BT BT deriving(Show)
addr::BT->Char
addr E = []
addr (T E E) = ["eps"]
addr (T l r) = ["eps"] ++ f1
f1 (T E E) = ["0"]
f1 (T l r) = ["0" ++ f1 ]
flk E = []
flk (T E E) = ["0"]
flk (T l E) = ["0"] ++ ["00" ++ fl ]
flk (T E r) = ["0"] ++ ["01" ++ fr ]
flk (T l r) = ["0"] ++ ["00" ++ fl ] ++ ["01" ++ fr ]
frk E = []
frk (T E E) = ["1"]
frk (T l E) = ["1"] ++ ["11" ++ fl ]
frk (T E r) = ["1"] ++ ["11" ++ fr ] ++ ["10" ++ fr ]
frk (T l r) = ["1"] ++ ["11" ++ fr ] ++ ["10" ++ fl ]
fl E = []
fl (T l r) = "0" ++ fl ++ fr
fr E = []
fr (T l r) = "1" ++ fl ++ fr
Ich weiß nicht ob das so geht, aber Haskell sagt ständig:
ERROR [mm] file:.\P2.1.hs:10 [/mm] - Type error in application
*** Expression : "0" ++ f1
*** Term : f1
*** Type : BT -> Char
*** Does not match : [a]
Ich weiß nicht, was genau ich falsch mache oder was ich ändern muss, hab so einiges ausprobiert, aber ich denke das mein Ansatz eigentlich richtig ist. Oder????
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 18:20 Do 03.01.2008 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|