2016-03-28 148 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