2016-03-28 77 views
0

我在哈斯克爾很新,我有一個問題。我想列舉前例。 [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

你不使用你的函數的遞歸調用的Tree構造,BDD應返回Tree,至極的是建立與LeafNode,但是請注意,節點應與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

你的代碼試圖把xLeaf,要求它是一個Int,並且還試圖推出一個Node,要求它是一個String。當然IntString是不同的類型,所以這不會編譯。另外,Tree是一個類型構造函數,因此您無法使用它。你的代碼實際上應該做什麼?

+0

它應該採取列表和元素由元素添加他們從左下角到右下角,因爲這棵樹將是像f(x1,x2,x3)這樣的表達式樹, – Can