我在哈斯克尔很新,我有一个问题。我想列举前例。 [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