在Haskell中有对象等价性的意义吗? [英] Is there a sense of 'object equality' in Haskell?
本文介绍了在Haskell中有对象等价性的意义吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如果我在Haskell中有一个单链接列表:
data LL a = Empty | Node a (LL a) deriving (Show, Eq)
我可以轻松地实现在结尾和开头插入的方法。但是,如何在特定元素之前或之后插入呢?如果我有LL
的Integer
,我能否在Haskell中区分在包含1
的特定节点之后插入4
,而不是在处理列表时看到的第一个1
?
Node 1 (Node 2 (Node 3 (Node 1 Empty)))
我很好奇insertAfter
方法会是什么样子,您可以指定"在这个包含1的特定节点后插入5"。如果我想在包含1
的第一个节点之后插入,是否必须传入整个列表才能指定,而对于最后一个节点,只需Node 1 Empty
?
我不确定将其称为"对象相等"是否正确--但我想知道是否有办法在这样的数据结构中引用具有相同有效负载的类型的特定元素。
推荐答案
不,没有这回事。区分值的唯一方法是通过它们的结构;在某些语言中没有类似标识的对象。也就是说,您无法区分这两个值:(Just 5, Just 5)
的行为与let x = Just 5 in (x, x)
完全相同。同样,"ThisNode 1
"和"Some OtherNode 1
"之间也没有区别:它们没有区别。
这篇关于在Haskell中有对象等价性的意义吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文