gpt4 book ai didi

haskell - foldr 如何在此数据树上工作?

转载 作者:行者123 更新时间:2023-12-01 08:21:45 26 4
gpt4 key购买 nike

我知道 foldr 如何在 Leaf 上工作,但我不知道 foldr 如何在 Node 上工作。如果我们已经有 f 和 z 作为参数,那么参数\x z' 是什么?假设我们有

tree = Node [Leaf 1, Leaf 2, Node [Leaf 1, Leaf 3]]

这段代码是如何工作的

foldr (+) 0 tree
data RoseTree a =  Leaf a | Node [RoseTree a] 
instance Foldable RoseTree where
foldr f z (Leaf x) = f x z
foldr f z (Node ns) =
foldr (\x z' -> foldr f z' x) z ns

最佳答案

Nodefoldr 定义调用RoseTree 列表上的foldr。然后,在该 foldr 内部,它在每个子树上调用 foldr,使用当前累加器作为初始参数。

基本上,即使函数看起来调用了两次 foldr,它每次都针对不同的类型调用它,因此只有一个是递归的。另一个是为[a]定义的foldr

关于haskell - foldr 如何在此数据树上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56334681/

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