Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell树大小_Haskell_Tree - Fatal编程技术网

Haskell树大小

Haskell树大小,haskell,tree,Haskell,Tree,还是个哈斯凯尔人 我想得到一棵树的大小 data Tree a = Leaf a | Node (Tree a) (Tree a) size :: Tree a -> Int size empty = 0 size (Leaf n) = 1 size (Node x z) = size x + size z + 1 如果我用 size (Node (Node (Leaf 1)(Leaf 3)) (Leaf 2)) 我得到的只是0。代码正确吗?我只是没有正确调用它 顺便说一句,我

还是个哈斯凯尔人

我想得到一棵树的大小

data Tree a = Leaf a | Node (Tree a) (Tree a)

size :: Tree a -> Int
size empty = 0
size (Leaf n)    = 1
size (Node x z) = size x + size z + 1
如果我用

size (Node (Node (Leaf 1)(Leaf 3)) (Leaf 2))
我得到的只是0。代码正确吗?我只是没有正确调用它


顺便说一句,我已经看到了很多使用Empty而不是Empty的示例,但是这会在编译时导致错误。我在这里遗漏了什么?

请注意,在
size
函数中有一个重叠模式匹配。行
size empty
将始终进行模式匹配,结果总是
0
的值。您的
size
函数应该如下所示:

size :: Tree a -> Int
size (Leaf n)    = 1
size (Node x z) = size x + size z + 1
ghci中的演示:

λ> size (Node (Node (Leaf 1)(Leaf 3)) (Leaf 2))
5

请注意,
size
函数中存在重叠模式匹配。行
size empty
将始终进行模式匹配,结果总是
0
的值。您的
size
函数应该如下所示:

size :: Tree a -> Int
size (Leaf n)    = 1
size (Node x z) = size x + size z + 1
ghci中的演示:

λ> size (Node (Node (Leaf 1)(Leaf 3)) (Leaf 2))
5

这一行有问题:

size empty = 0
empty
不是构造函数,因此它匹配任何内容,并立即返回0,使函数等效于
const 0

因为无法用您的定义生成空树,所以添加这样一行是毫无意义的

如果您确实想使空树成为可能,则必须稍微更改定义:

data Tree a = Empty | Node a (Tree a) (Tree a)

size Empty        = 0
size (Node _ a b) = 1 + size a + size b

这一行有问题:

size empty = 0
empty
不是构造函数,因此它匹配任何内容,并立即返回0,使函数等效于
const 0

因为无法用您的定义生成空树,所以添加这样一行是毫无意义的

如果您确实想使空树成为可能,则必须稍微更改定义:

data Tree a = Empty | Node a (Tree a) (Tree a)

size Empty        = 0
size (Node _ a b) = 1 + size a + size b

谢谢,我想这可能是问题所在。我怎样才能空出去工作?导入一些东西吗?@user3633383查看一下您的树数据类型。根据你的定义,有可能有一棵空树吗?谢谢,我想这可能就是问题所在。我怎样才能空出去工作?导入一些东西吗?@user3633383查看一下您的树数据类型。根据你的定义,有可能有一棵空树吗?