【发布时间】:2013-01-22 16:55:40
【问题描述】:
我有一个复杂的递归数据结构,我已将其简化为以下内容:
data Node = Node { value :: Integer, next :: Node } deriving (Show,Eq)
给定以下表达式:
--Create a circular structure
a = Node 1 b
b = Node 0 a --Tie the knot
c = Node 1 b --Another structure which points to b
表达式a 和c 在概念上是相等的:它们都表示一个节点,该节点保存值1 并指向表达式b。我的问题是:如何检查它们在 Haskell 表达式中是否确实相等?如果我评估a == c,它将永远评估循环结构中的子元素。
是否可以在 Haskell 中进行这样的比较?
编辑:就我而言,我试图将两者进行比较以进行检查/调试。但这样做的另一个原因可能是单元测试。
【问题讨论】:
-
你为什么要这样做?
-
看到我做这个项目是为了学习 Haskell 并测试它的所有可能性,我想尽可能避免使用 GHC 特定的扩展。
-
除非你给每个节点一个明确的 ID 值并使用 ID 比较它们,否则没有 GHC 扩展是不可能的(即使有它们也是不确定的)。
-
一般情况下是不可能的。问题是语义相等是不可判定的。
标签: haskell