gpt4 book ai didi

haskell - Haskell中是否有 'object equality'的含义?

转载 作者:行者123 更新时间:2023-12-02 02:07:47 24 4
gpt4 key购买 nike

如果我在 Haskell 中有一个单链表:

data LL a = Empty | Node a (LL a) deriving (Show, Eq)

我可以轻松实现在末尾和开头插入的方法。但是在特定元素之后或之前插入又如何呢?如果我有一个LLInteger ,我可以在 Haskell 中区分插入 4 吗?在包含 1 的特定节点之后,而不是第一个 1它在处理列表时看到的?

Node 1 (Node 2 (Node 3 (Node 1 Empty)))

我很好奇insertAfter是如何做到的方法看起来您可以指定“在包含 1 的特定节点后插入 5”。如果我想在第一个包含 1 的节点之后插入,我是否必须传递整个列表来指定这一点,并且对于最后一个节点,仅 Node 1 Empty

我不确定将其称为“对象相等”是否正确 - 但我想知道是否有一种方法可以在这样的数据结构中引用具有相同有效负载的类型的特定元素。

最佳答案

不,不存在这样的事情。区分值(value)观的唯一方法是通过它们的结构。不存在像某些语言中的对象那样的身份。也就是说,您无法区分这两个值:(Just 5, Just 5) 的行为与 let x = Just 5 in (x, x) 完全相同>。同样,“此节点 1”和“其他节点 1”之间没有区别:它们是无法区分的。

通常这个问题的“解决方案”是以其他方式思考你的问题,这样就不再需要根据身份进行区分(通常实际上没有必要)。但是,正如评论中提到的,您可以自己模拟其他语言的“指针”机制,通过生成某种不同的标签,例如增加整数,并为每个对象分配一个标签,以便您可以区分它们。

关于haskell - Haskell中是否有 'object equality'的含义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27762441/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com