gpt4 book ai didi

haskell - 如何为这个特定结构实现 foldr?

转载 作者:行者123 更新时间:2023-12-04 18:11:08 27 4
gpt4 key购买 nike

我正在学习 Haskell。我有一个看起来像这样的列表:

data TwoValueList a = Empty | Node a a (TwoValueList a)
我想做这个 Foldable ,这样我就可以进行如下计算:
sum (Node 0 1 (Node 2 3 Empty)) --should produce 6
如果只有一个值,那将很容易:
data OneValueList = Empty | Node a (OneValueList a)
instance Foldable OneValueList where
foldr f b Empty = b
foldr f b (Node a rest) = f a (foldr f b rest)
但是,如果一个节点内有两个值,我无法细化类型,因为 f需要 ab ,但我必须申请 f两个 a TwoValueList 的内部并以某种方式组合它们。我是否缺少其他类型约束?
谢谢你。

最佳答案

data TwoValueList a = Empty | Node a a (TwoValueList a)

instance Foldable TwoValueList where
foldr _ ini Empty = ini
foldr f ini (Node x y xs) = f x $ f y $ foldr f ini xs
其工作方式是 foldrTwoValueList 的递归实例上递归调用自身相互嵌入,直到满足 Empty .此时它返回 ini这是初始值,调用堆栈会解决上面的所有函数调用。

关于haskell - 如何为这个特定结构实现 foldr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69959424/

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