是否有减少平等检查成本的方法/策略?

时间:2018-03-09 09:55:34

标签: haskell functional-programming equality

不可变性以及参考透明度导致一些理想的属性。但它们共同存在两个缺点:

  • 深度复制
  • 确定平等

这两项操作都很昂贵。

结构共享减轻了第一个问题。 List类型是最简单的持久数据结构之一,并且由于结构共享在列表之前是相当便宜的:

xs = [1, 2, 3] --     [1, [2, [3, []]]]
ys = 0 : xs    -- [0, [1, [2, [3, []]]]]

但是如何在不检查每个元素的相等性的情况下确定xsys之间的相等性?

在像Javascript这样的命令式语言中,我只需对根节点进行物理等式检查。由于这会使引用透明性无效,当然在Haskell中是不可能的。

是否存在避免暴力方法的方法/策略 - 至少在某些情况下?

我目前在Javascript中尝试的是创建一个实现monad类的相等类型,这样我就可以确定引用相等而不会丢失RT。但我太缺乏经验,不知道这是否是一种很有前途的方法。

0 个答案:

没有答案