为什么会出现这些类型错误?

提卡尔

我有一个数据类型:

data Tree = Empty | Node Int Tree Tree

我想要功能

nodeDepth :: Tree -> [(Int, Int)] 

每个节点一对。第一个元素是label(值),第二个元素是其深度。

我的意图(原始代码)是这样的:

nodeDepth (Node label left right) = zip nodeDepth' (Node label left right) [0]
nodeDepth' Empty _ = []
nodeDepth' (Node label left right) [level] = label : nodeDepth' (Node label left right) level : (1 + level)

但这是行不通的。

怎么了?我正在使用Frege REPL

Error message are like :

E <console>.fr:22: t19906 occurs in type [t19906] rendering expression level{19727} untypable.

E <console>.fr:22: type error in  expression level
    type is   t19906
    used as   [t19906]

E <console>.fr:22: type error in  expression
    nodeDepth' (Node label left right) level:+ 1 level
    type is   [[t19909]]
    used as   [Int]


E <console>.fr:22: [[Int]] is not an instance of Num


E <console>.fr:20: type error in expression nodeDepth'
    type is apparently [t19961]
    used as function


H <console>.fr:20: too many or too few arguments perhaps?


E <console>.fr:20: type error in  expression Node label left right
    type is   Tree
    used as   [t19964]


E <console>.fr:20: type error in expression
    zip nodeDepth' (Node label left right)
    type is apparently [(t19961,t19964)]
    used as function


H <console>.fr:20: too many or too few arguments perhaps?


W <console>.fr:20: application of nodeDepth will diverge.
gen

至于错误,请考虑以下行:

nodeDepth (Node label left right) = zip nodeDepth' (Node label left right) [0]

由于Haskell功能应用程序与左侧关联,因此zip将功能nodeDepth'作为其第一个参数。要解决此特定错误,您可能需要编写:

zip (nodeDepth' (Node label left right)) [0]

但是然后您仍然缺少nodeDepth'的第二个参数,因此括号中的表达式仅返回函数而不是列表。

另一个错误是为非空树定义nodeDepth'时:模式匹配[level]将level捕获为单个元素,并将其传递给同一行。这只能通过假设级别本身是一个列表来解决,但这也没有太大意义,因为在该行的末尾,添加内容假定级别为数字类型。

nodeDepth' (Node label left right) [level] = label : nodeDepth' (Node label left right) level : (1 + level)

以下函数nodeDepth使用深度优先搜索遍历树,并构造标签列表和各个节点的深度。

data Tree = Empty | Node Int Tree Tree

wikiTree = Node 2 (Node 7 (Node 2 Empty Empty) (Node 6 (Node 5 Empty Empty) (Node 11 Empty Empty))) (Node 5 Empty (Node 9 (Node 4 Empty Empty) Empty))

nodeDepth :: Tree -> [(Int, Int)]
nodeDepth Empty = []
nodeDepth (Node label left right) = nodeDepthAccumulator (Node label left right) 0

nodeDepthAccumulator :: Tree -> Int -> [(Int, Int)]
nodeDepthAccumulator Empty _ = []
nodeDepthAccumulator (Node label left right) depth = (label,depth) : nodeDepthAccumulator left (depth+1) ++ nodeDepthAccumulator right (depth+1)

WikiTree给出的树

在示例WikiTree上执行nodeDepth,您将获得:

> nodeDepth wikiTree
> [(2, 0),(7, 1),(2, 2),(6, 2),(5, 3),(11, 3),(5, 1),(9, 2),(4, 3)]

如您所料。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么会出现这些MySQL错误?

来自分类Dev

为什么会出现这些错误?

来自分类Dev

为什么会出现无限类型错误

来自分类Dev

为什么会出现这些汇编器错误?

来自分类Dev

为什么会出现这些汇编器错误?

来自分类Dev

Android:为什么会出现这些错误,以及解决这些错误的简便方法是什么?

来自分类Dev

我应该如何清除这些错误,为什么会出现这些错误?

来自分类Dev

为什么会出现错误“类型的方法未定义”?

来自分类Dev

一栏清空为什么会出现类型错误?

来自分类Dev

设置OpenGL:为什么会出现这些错误?为什么Visual Studio冻结?

来自分类Dev

自升级到Rails 4以来,为什么会出现这些PostgreSQL错误?

来自分类Dev

为什么会出现这些错误?C#-子手游戏

来自分类Dev

在终端中编译C ++程序时,为什么会出现这些未定义的错误?

来自分类Dev

在终端中编译C ++程序时,为什么会出现这些未定义的错误?

来自分类Dev

如果代码正确,为什么我的 OK 按钮上会出现这些错误?

来自分类Dev

为什么会出现“错误的fs类型,错误的选项,错误的超级块”错误?

来自分类Dev

为什么会出现“错误的fs类型,错误的选项,错误的超级块”错误?

来自分类Dev

为什么会出现此本地错误?

来自分类Dev

为什么会出现此身体错误?

来自分类Dev

为什么会出现此sqlite错误?

来自分类Dev

为什么会出现<identifier>预期错误?

来自分类Dev

Python:为什么会出现此错误?

来自分类Dev

为什么会出现Stackoverflow错误?

来自分类Dev

为什么会出现细分错误?

来自分类Dev

为什么会出现细分错误?

来自分类Dev

为什么会出现输入错误?

来自分类Dev

为什么会出现<identifier>预期错误?

来自分类Dev

jQuery:为什么会出现错误?

来自分类Dev

为什么会出现错误划分?

Related 相关文章

  1. 1

    为什么会出现这些MySQL错误?

  2. 2

    为什么会出现这些错误?

  3. 3

    为什么会出现无限类型错误

  4. 4

    为什么会出现这些汇编器错误?

  5. 5

    为什么会出现这些汇编器错误?

  6. 6

    Android:为什么会出现这些错误,以及解决这些错误的简便方法是什么?

  7. 7

    我应该如何清除这些错误,为什么会出现这些错误?

  8. 8

    为什么会出现错误“类型的方法未定义”?

  9. 9

    一栏清空为什么会出现类型错误?

  10. 10

    设置OpenGL:为什么会出现这些错误?为什么Visual Studio冻结?

  11. 11

    自升级到Rails 4以来,为什么会出现这些PostgreSQL错误?

  12. 12

    为什么会出现这些错误?C#-子手游戏

  13. 13

    在终端中编译C ++程序时,为什么会出现这些未定义的错误?

  14. 14

    在终端中编译C ++程序时,为什么会出现这些未定义的错误?

  15. 15

    如果代码正确,为什么我的 OK 按钮上会出现这些错误?

  16. 16

    为什么会出现“错误的fs类型,错误的选项,错误的超级块”错误?

  17. 17

    为什么会出现“错误的fs类型,错误的选项,错误的超级块”错误?

  18. 18

    为什么会出现此本地错误?

  19. 19

    为什么会出现此身体错误?

  20. 20

    为什么会出现此sqlite错误?

  21. 21

    为什么会出现<identifier>预期错误?

  22. 22

    Python:为什么会出现此错误?

  23. 23

    为什么会出现Stackoverflow错误?

  24. 24

    为什么会出现细分错误?

  25. 25

    为什么会出现细分错误?

  26. 26

    为什么会出现输入错误?

  27. 27

    为什么会出现<identifier>预期错误?

  28. 28

    jQuery:为什么会出现错误?

  29. 29

    为什么会出现错误划分?

热门标签

归档