如何创建一个Haskell Tree Structure来显示类似c#继承的类结构。(如果我理解正确)

时间:2012-12-17 22:35:06

标签: haskell types tree

我熟悉C#相关的编程语言,但我有一个Haskell问题。

我有一个字符串,这是一个单词列表。我需要将它放在树形结构中,然后显示出来。例如,需要显示如下内容:

树应该如下所示:第一层一个字符串,第二层是3个字符串列表,从第一层字符串分组,第三层是3组类别名称为Enum。

"the quick brown fox jumped over the lazy black dog"
("the", "quick", "jumped", "over", "the", "lazy"), ("brown", "black"), ("fox", "dog")
"Other Words", "Colour", "Animal"

所以,我可以理解,如果在c#中,这些可以在分层类中,并且ToString可以显示。

我是Haskell的新手。我编写了函数来将字符串解析为类别的最后一行,但我无法理解如何将数据放入树结构并显示?

1 个答案:

答案 0 :(得分:3)

数据类型在Haskell中很便宜。让我们定义一些来证明它!

data Layer1 = L1 String [Layer2]

这定义了一个名为Layer1的数据类型,它具有一个名为L1的构造函数。此构造函数包含两个字段:一个String,其中包含此节点的名称,以及一些尚未指定类型Layer2的子项列表。

让我们定义第二种类型:

data Layer2 = L2 String [String]

这种类型与前一种类型相同,只是它的子节点是字符串。

但是,如果我们想要继续使用我们想要的多个层呢?好吧,幸运的是,Haskell接受递归定义的数据结构。如果我们推广我们的第一种类型,它可以将自己存储为子项:

data Layer1 = Layer1 String [Layer1]

换句话说,每个Layer1都包含一个字符串和一个更加Layer1 s的子项列表。实际上,这基本上是树的定义:

data Tree a = Node a [Tree a]