最佳答案
使用代数数据类型在 haskell 中表示树或列表非常简单。但是如何进行排版来表示一个图形呢?看起来你需要一些指导。我猜你可能会有
type Nodetag = String
type Neighbours = [Nodetag]
data Node a = Node a Nodetag Neighbours
这是可行的。然而,它感觉有点解耦; 结构中不同节点之间的链接并不像列表中当前前一个元素和下一个元素之间的链接,或者树中节点的父节点和子节点之间的链接那样“感觉”牢固。我有一种预感,在我定义的图上进行代数操作可能会受到通过标记系统引入的间接级别的阻碍。
主要是这种怀疑的感觉和对不雅的看法使我提出这个问题。在哈斯克尔,有没有一种更好、更精确的定义图形的数学方法?还是我偶然发现了某些本质上很难/基本的东西?递归数据结构很好,但这似乎是另一回事。一种自引用数据结构,在不同的意义上,树和列表是如何自引用的。就像列表和树在类型级别上是自引用的,但图在值级别上是自引用的。
到底怎么回事?