2016-03-28 7 views
0

私はhaskellで非常に新しいです。問題があります。私は元気にリストを取りたい。 [0,1,0,0,1,1,0,1]とし、要素をTree構造に入れます。バイナリ式ツリー

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

これまでに以下のコードを書きましたが、それはエラーが発生します。

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

ありがとうございます!

+2

あなたの関数 'bdd'は何を達成しようとしていますか?そしてそれは何の誤りを与えるのですか? – Sibi

+0

そのツリーには文字列のノードがあり、下の葉は整数なので、整数かそうでないかをチェックしようとしましたが、再びツリーを呼び出すのですが、ツリーはスコープに含まれていません。 – Can

+0

'[0,1,0,0,1,1,0,1]'のように見えるはずの 'Tree'は何ですか? – chepner

答えて

2

、BDDはTreeを返す必要があり、ウィッヒはLeafまたはNodeでビルドですが、ノードは、またして2本の木が構築されるべきであるとの通知がLeafで構築する必要がありますまたはNode、ないTree

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

あなたが適切にツリーを構築する方法を確認する必要があり、これは単なる一例です。

2

あなたのコードは、それがIntであることを必要とし、Leafxを入れしようとし、また、それがStringであることを必要とし、Node中出ししようとします。確かにIntStringは異なるタイプなので、これはコンパイルされません。また、Treeは型コンストラクタなので、使用することはできません。実際にあなたのコードは何をすべきですか?あなたは、あなたの関数の再帰呼び出しにTreeコンストラクタを使用していない

+0

このツリーはf(x1、x2、x3)のような式ツリーになるので、左下から右下にリストと要素を追加する必要があります。 – Can

関連する問題