2016-03-28 22 views
0

Haskell çok yeniyim ve bir derdim var. Eski için liste almak istiyorum. [0,1,0,0,1,1,0,1] ve elemanları bir Ağaç yapısına; İkili ifadesi Ağacı

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

bugüne kadar aşağıdaki kodu yazdım ama bir hata verir.

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

Yardımlarınız için teşekkür ederiz!

+2

Ne işlevi 'başarmaya çalışırlar bdd' geliyor? Ve ne gibi bir hata veriyor. – Sibi

+0

Bu ağaçta dize olan düğümler ve alt yapraklar tamsayılar olacak, bu yüzden tamsayı olup olmadığını kontrol etmeyi denedim, bu yüzden ağacı tekrar arayıp ağacın kapsamı olmadığını söylüyor. – Can

+0

'[0,1,0,0,1,1,0,1]' dan kaynaklanan 'Ağaç' neye benzemeli? – chepner

cevap

2

Sen fonksiyonunun özyinelemeli çağrı Tree yapıcı kullanmıyorsanız, bdd bir Tree dönmelidir, hangi Leaf veya Node ile kurulmuş, ancak bu Düğüm da Leaf ile inşa edilmelidir ile 2 ağaçları ile inşa edilmelidir fark olduğunu Bunu düzgün ağacı oluşturmak istiyorum nasıl kontrol etmelisiniz değil Tree

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

veya Node, bu sadece bir örnektir.

2

Kodunuz bir Int olmaya gerektiren bir Leaf içinde x koymak çalışır ve aynı zamanda bir String olmaya gerektiren bir Node içinde söndürmek çalışır. Kesinlikle Int ve String farklı türleri vardır, bu nedenle bu derleme olmayacaktır. Ayrıca, Tree bir tür yapıcıdır, bu yüzden bunu terimlerle kullanamazsınız. Kodunun aslında ne yapması gerekiyor?

+0

Listeyi ve elementi almalı ve onları soldan sağa doğru ekleyelim. Çünkü bu ağaç f (x1, x2, x3) gibi ifade ağacı olacak – Can