如何创建一个Haskell树结构,以像c#继承的类结构一样显示。(如果我理解正确的话)

如何创建一个Haskell树结构,以像c#继承的类结构一样显示。(如果我理解正确的话),haskell,types,tree,Haskell,Types,Tree,我熟悉与C#相关的编程语言,但我有一个Haskell问题 我有一个字符串,它是一个单词列表。我需要把它放在一个树形结构中,并显示出来。例如,需要显示如下内容: 树应该是这样的:第一层是一个字符串,第二层是3个字符串列表,从第一层字符串分组,第三层是3个组类别名称作为枚举 "the quick brown fox jumped over the lazy black dog" ("the", "quick", "jumped", "over", "the", "lazy"), ("brown",

我熟悉与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中很便宜。让我们定义一些来证明它

data Layer1 = L1 String [Layer2]
这定义了一个名为
Layer1
的数据类型,其构造函数名为
L1
。此构造函数包含两个字段:一个是保存此节点名称的
字符串
,另一个是一些尚未指定类型的子项列表
第2层

让我们定义第二种类型:

data Layer2 = L2 String [String]
此类型与前一个类型相同,只是其子类型是字符串

但是,如果我们想继续保持我们想要的层数呢?幸运的是,Haskell接受递归定义的数据结构。如果我们泛化第一种类型,它可以将自己存储为子类型:

data Layer1 = Layer1 String [Layer1]
换句话说,每一个
Layer1
都包含一个字符串和一系列子元素,这些子元素甚至更像
Layer1
s。事实上,这基本上就是树的定义:

data Tree a = Node a [Tree a]

你能解释一下你的树是什么吗?从你的问题中我不明白你要创建什么样的树结构?谢谢你的回复,我用树的细节更新了帖子。我也有点困惑你需要什么样的树结构。你能发布一些你需要的C代码吗?为什么不让第二层包含“其他单词”、“颜色”、“动物”和底层包含单个单词?谢谢你的回复,我的理解是,一旦设置了变量,它的值就不能更改。因此,当我分析这个字符串时,它必须一次创建一个层,问题是如何在创建第一个层之后修改值?非常感谢@冬季创建一棵新树。幸运的是,这并不像听起来那么糟糕,因为如果重用原始树的旧部分,它们将不会被重新计算。