2016-03-28 15 views
0

Ich bin sehr neu in Haskell und ich habe ein Problem. Ich möchte eine Liste für Ex nehmen. [0,1,0,0,1,1,0,1] und lege die Elemente in eine Baumstruktur, die ist;Binary Expression Tree

data Tree = Leaf Int | Node String (Tree) (Tree)

so schrieb weit den Code unten, aber es gibt einen Fehler.

bdd (x:xs)= if elem x [0..9] then Leaf x else Node x (Tree) (Tree) 

danke für Ihre Hilfe!

+2

Was versucht Ihre Funktion 'bdd' zu erreichen? Und welchen Fehler gibt es? – Sibi

+0

in diesem Baum gibt es Knoten, die Zeichenfolge sind und die unteren Blätter sind die ganzen Zahlen, also habe ich versucht zu überprüfen, ob es ganzzahlig ist oder nicht, also rufen Sie den Baum erneut, aber es sagt Baum ist nicht im Bereich. – Can

+0

Wie soll der 'Baum' aus' [0,1,0,0,1,1,0,1] aussehen? – chepner

Antwort

2

Sie sind nicht mit dem Tree Konstruktor auf dem rekursiven Aufruf Ihrer Funktion, BDD eine Tree zurückkehren sollte, ist wich mit Leaf oder Node, bauen aber das Knoten feststellen sollte auch mit Leaf mit 2 Bäumen gebaut werden gebaut werden sollte oder Node, nicht Tree

bdd :: [Int] -> Tree 
bdd (x:xs)= if elem x [0..9] then Leaf x else Node (show x) (bdd xs) (bdd xs) 

Sie überprüfen sollten, wie Sie möchten, um richtig auf den Baum bauen, das ist nur ein Beispiel.

2

Ihr Code versucht x in einem Leaf zu setzen, erfordert es eine Int, zu sein und versucht, auch in einem Node löschte, erfordert es eine String zu sein. Sicherlich Int und String sind verschiedene Typen, so wird dies nicht kompilieren. Außerdem ist Tree ein Typenkonstruktor, Sie können ihn also nicht verwenden. Was soll dein Code eigentlich machen?

+0

Es sollte die Liste nehmen und Element für Element fügen Sie sie von unten links nach unten rechts, denn dieser Baum wird Ausdruck Baum wie f (x1, x2, x3) – Can