【发布时间】:2013-08-06 10:20:21
【问题描述】:
在我最初尝试创建一个不相交的集合数据结构时,我创建了一个Point 数据类型,其中parent 指向另一个Point:
data Point a = Point
{ _value :: a
, _parent :: Point a
, _rank :: Int
}
为了创建一个单例集,创建了一个Point,并将其自身作为其父级(我相信这被称为打结):
makeSet' :: a -> Point a
makeSet' x = let p = Point x p 0 in p
现在,当我想写findSet(即跟随父指针,直到找到其父为自身的Point)时,我遇到了一个问题:是否可以检查是否是这种情况?一个幼稚的Eq 实例当然会无限循环——但这个检查在概念上是否可以编写?
(我最终使用Maybe Point 作为父字段,请参阅my other question。)
【问题讨论】:
-
从概念上讲,什么时候 2 点是同一件事?当他们的 _value 和 _rank 相同时?
标签: haskell data-structures tying-the-knot