-1

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

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

树应该是这样的:第一层一个字符串,第二层是 3 个字符串列表,从第一层字符串分组,第三层是 3 组类别名称作为枚举。

"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 的新手。我编写了将字符串解析为最后一行类别的函数,但我不明白如何将数据放入树结构中并显示?

4

1 回答 1

3

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

data Layer1 = L1 String [Layer2]

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

让我们定义第二种类型:

data Layer2 = L2 String [String]

这种类型和前一种一样,只是它的子元素是字符串。

但是,如果我们想继续进行尽可能多的层呢?好吧,幸运的是,Haskell 接受递归定义的数据结构。如果我们概括我们的第一种类型,它可以将自己存储为孩子:

data Layer1 = Layer1 String [Layer1]

换句话说,everyLayer1包含一个字符串和一个包含更多Layer1s 的子节点的列表。事实上,这基本上是一棵树的定义:

data Tree a = Node a [Tree a]
于 2012-12-17T22:43:30.370 回答