如何在 Haskell 中最好地定义有向无环图(DAG)(字符串)(有一个根)?
我特别需要尽快在这个数据结构上应用以下两个函数:
我想到[(String,[String])]
每个对是图表的一个元素,包括其名称(String
)和包含(直接)名称的字符串列表([String]
)这个元素的父母。这种实现的问题在于很难完成第二项任务。
您还可以再次使用[(String,[String])]
,而字符串列表([String]
)包含(直接)子项的名称。但在这里,第一项任务很难完成。
我该怎么办?有什么替代品?哪种方法最有效?
编辑:还有一句话:我也希望能轻松定义。我必须“手动”自己定义这种数据类型的实例,所以我想避免不必要的重复。
答案 0 :(得分:2)
你看过the tree implementtion in Martin Erwig's Functional Graph Library了吗?每个节点都被表示为包含其子节点及其父节点的上下文。有关如何访问此类,请参阅graph类型类。它可能没有您要求的那么容易,但它已经存在,经过良好测试且易于使用。我在一个大型项目中使用了十多年。