Haskell定义一棵树

时间:2016-03-20 23:09:32

标签: haskell binary-tree definition

在haskell我可以做一些事情,比如

a :: Int
a = 15

我的数据类型如下

data Btree a = ND | Data a |  Branch (Btree a) (Btree a) deriving (Show, Eq)

如何定义树,而不是使用上面的函数。

我试过了;

tree :: BTree
tree = Branch Btree (Branch ND Data 1) (Branch ND (Branch ND ND))

我似乎无法让它工作(我是haskell的新手,所以如果这是非常基本的我提前道歉)

2 个答案:

答案 0 :(得分:3)

请记住,要构造数据类型的实例,您需要调用其构造函数之一。所有这些构造函数NDDataBranch只是常规函数,因此您应该这样调用它们。

tree中,您将数据类型(Btree)与构造函数混合,而您应该只使用构造函数。另外,请记住,函数调用('空格运算符'是左相关的)非常贪婪,因此Branch ND Data 1使用3个参数调用函数Branch,而不是你想要:Branch ND (Data 1)

为了创建你的深度树2,考虑到上面你写的:

tree = Branch (Branch ND (Data 1)) (Branch ND (Branch ND ND))

答案 1 :(得分:2)

请注意,Data 1也将是一个B树,没有任何额外的行李

Prelude> :t (Data 1)
(Data 1) :: Num a => Btree a

如果你想要一个只有正确元素的简单分支,你可以写

Branch ND (Data 1)

或两个深度,如另一个答案。在这一点上,方便的构造函数将很方便,以最大限度地减少噪音和打字。

相关问题