我熟悉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的新手。我编写了函数来将字符串解析为类别的最后一行,但我无法理解如何将数据放入树结构并显示?
答案 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]