我正在尝试定义一个树,每个节点中有两个值.一个表示节点的值,第二个表示距叶子的距离.
data Tree2 a b = Nil 0 | T (Tree2 a b) (a b) (Tree2 a b) deriving (Eq,Ord,Show,Read)
Run Code Online (Sandbox Code Playgroud)
定义是否正确?"Nil 0"有意义吗?我想说,如果值不在树中而不是距离为0.
定义在每个节点包含两个值的树是不必要的,因为您可以只使用在每个节点包含一个值的树,但它包含两个值的元组.
例如:
data Tree a = Nil | Node (Tree a) a (Tree a) deriving (Eq, Ord, Show, Read)
type Tree2 a b = Tree (a,b)
Run Code Online (Sandbox Code Playgroud)
现在你已经拥有了Tree2它的所有特性Tree,但需要2个类型参数.
使用它的函数的一个例子是:
getDistance :: (Num b) => Tree2 a b -> b
getDistance Nil = 0
getDistance (Node _ (_,x) _) = x
Run Code Online (Sandbox Code Playgroud)