如何在Haskell中定义树状DAG

时间:2013-05-06 20:42:36

标签: haskell data-structures tree directed-acyclic-graphs

如何在 Haskell 中最好地定义有向无环图(DAG)(字符串)(有一个根)?

我特别需要尽快在这个数据结构上应用以下两个函数:

  1. 查找一个元素的所有(直接和间接)祖先(包括父母的父母等)。
  2. 查找一个元素的所有(直接)子元素。
  3. 我想到[(String,[String])]每个对是图表的一个元素,包括其名称(String)和包含(直接)名称的字符串列表([String])这个元素的父母。这种实现的问题在于很难完成第二项任务。

    您还可以再次使用[(String,[String])],而字符串列表([String])包含(直接)子项的名称。但在这里,第一项任务很难完成。

    我该怎么办?有什么替代品?哪种方法最有效?

    编辑:还有一句话:我也希望能轻松定义。我必须“手动”自己定义这种数据类型的实例,所以我想避免不必要的重复。

1 个答案:

答案 0 :(得分:2)

你看过the tree implementtion in Martin Erwig's Functional Graph Library了吗?每个节点都被表示为包含其子节点及其父节点的上下文。有关如何访问此类,请参阅graph类型类。它可能没有您要求的那么容易,但它已经存在,经过良好测试且易于使用。我在一个大型项目中使用了十多年。