如何创建一个Haskell树结构,以像c#继承的类结构一样显示。(如果我理解正确的话)
我熟悉与C#相关的编程语言,但我有一个Haskell问题 我有一个字符串,它是一个单词列表。我需要把它放在一个树形结构中,并显示出来。例如,需要显示如下内容: 树应该是这样的:第一层是一个字符串,第二层是3个字符串列表,从第一层字符串分组,第三层是3个组类别名称作为枚举如何创建一个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",
"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代码吗?为什么不让第二层包含“其他单词”、“颜色”、“动物”和底层包含单个单词?谢谢你的回复,我的理解是,一旦设置了变量,它的值就不能更改。因此,当我分析这个字符串时,它必须一次创建一个层,问题是如何在创建第一个层之后修改值?非常感谢@冬季创建一棵新树。幸运的是,这并不像听起来那么糟糕,因为如果重用原始树的旧部分,它们将不会被重新计算。