我在哈斯克爾很新,我有一個問題。我想列舉前例。 [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)
謝謝你的幫助!
我在哈斯克爾很新,我有一個問題。我想列舉前例。 [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)
謝謝你的幫助!
你不使用你的函數的遞歸調用的Tree
構造,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)
您應該檢查你想怎麼才能正確地構建樹,這僅僅是一個例子。
你的代碼試圖把x
在Leaf
,要求它是一個Int
,並且還試圖推出一個Node
,要求它是一個String
。當然Int
和String
是不同的類型,所以這不會編譯。另外,Tree
是一個類型構造函數,因此您無法使用它。你的代碼實際上應該做什麼?
它應該採取列表和元素由元素添加他們從左下角到右下角,因爲這棵樹將是像f(x1,x2,x3)這樣的表達式樹, – Can
你的函數'bdd'試圖完成什麼?它給出了什麼錯誤。 – Sibi
在那棵樹中會有節點是字符串,底部葉子是整數,所以我試圖檢查它是否是整數,所以再次調用樹,但它說樹不在範圍內。 – Can
''[0,1,0,0,1,1,0,1]'產生的'Tree'應該是什麼樣的? – chepner