Haskell 中的非二叉树如何工作?
How does a non-binary-tree work in Haskell?
我目前正在学习 Haskell,但我很难掌握非二叉树的工作原理(我对二叉树也不太熟悉,但我已经对它)。
所以我定义了以下数据类型:
data Tree = Node a [Tree]
我正在努力理解数据类型“Tree
”在内存中的设置方式、如何调用它以及我应该如何在我的第一个 [=] 中引用 [Tree]
的列表15=].
以下示例不起作用,它说明了我在 Haskell 中掌握树结构时遇到的问题:
t1 = Node 10
t2 = Node 20
t3 = Node 30 [t1, t2]
我对面向对象语言处理树的方式更加满意,如果有人能解释并与面向对象语言进行比较,我将不胜感激。
您的数据类型定义错误,无法编译。需要如下:
data Tree a = Node a [Tree a]
您可以按如下方式使用它:
λ> t1 = Node 10 []
λ> t2 = Node 20 []
λ> t3 = Node 30 [t1, t2]
data Tree = Node a [Tree]
不正确的原因是您在构造函数中引用了一个未定义的变量 a
,该变量必须在类型构造函数中设置。此外,由于 []
接受类型 Tree a
的元素,因此 Tree a
必须设置在 []
.
中
除了数据声明之外,值声明不起作用的原因是每个 Node
构造函数都有 2 个参数,而您在这里 t1 = Node 10
只传入一个参数。即使一个节点没有子节点,你也需要给它一个空列表作为参数。
现在,为了演示目的,如果我们将数据类型更改为以下内容:
data Tree a = Node a [Tree a] deriving Show
我们可以打印t3
的输出:
λ> t1 = Node 10 []
λ> t2 = Node 20 []
λ> t3 = Node 30 [t1, t2]
λ> t3
Node 30 [Node 10 [],Node 20 []]
我目前正在学习 Haskell,但我很难掌握非二叉树的工作原理(我对二叉树也不太熟悉,但我已经对它)。
所以我定义了以下数据类型:
data Tree = Node a [Tree]
我正在努力理解数据类型“Tree
”在内存中的设置方式、如何调用它以及我应该如何在我的第一个 [=] 中引用 [Tree]
的列表15=].
以下示例不起作用,它说明了我在 Haskell 中掌握树结构时遇到的问题:
t1 = Node 10
t2 = Node 20
t3 = Node 30 [t1, t2]
我对面向对象语言处理树的方式更加满意,如果有人能解释并与面向对象语言进行比较,我将不胜感激。
您的数据类型定义错误,无法编译。需要如下:
data Tree a = Node a [Tree a]
您可以按如下方式使用它:
λ> t1 = Node 10 []
λ> t2 = Node 20 []
λ> t3 = Node 30 [t1, t2]
data Tree = Node a [Tree]
不正确的原因是您在构造函数中引用了一个未定义的变量 a
,该变量必须在类型构造函数中设置。此外,由于 []
接受类型 Tree a
的元素,因此 Tree a
必须设置在 []
.
除了数据声明之外,值声明不起作用的原因是每个 Node
构造函数都有 2 个参数,而您在这里 t1 = Node 10
只传入一个参数。即使一个节点没有子节点,你也需要给它一个空列表作为参数。
现在,为了演示目的,如果我们将数据类型更改为以下内容:
data Tree a = Node a [Tree a] deriving Show
我们可以打印t3
的输出:
λ> t1 = Node 10 []
λ> t2 = Node 20 []
λ> t3 = Node 30 [t1, t2]
λ> t3
Node 30 [Node 10 [],Node 20 []]