在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的新手,所以如果这是非常基本的我提前道歉)
答案 0 :(得分:3)
请记住,要构造数据类型的实例,您需要调用其构造函数之一。所有这些构造函数ND
,Data
,Branch
只是常规函数,因此您应该这样调用它们。
在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)
或两个深度,如另一个答案。在这一点上,方便的构造函数将很方便,以最大限度地减少噪音和打字。