gpt4 book ai didi

haskell - 折叠。 foldr 函数组合 - Haskell

转载 作者:行者123 更新时间:2023-12-03 01:10:15 27 4
gpt4 key购买 nike

所以,我真的在绞尽脑汁地试图理解foldl.foldr 的组成。这是一个例子:

(foldl.foldr) (+) 1 [[1,2,3],[4,5,6]]

结果是 22,但是这里到底发生了什么?

对我来说,这似乎是正在发生的事情:foldl (+) 1 [6,15]。我的疑问与 foldr 部分有关。难道不应该将 1 添加到所有子列表中吗?像这样:foldr (+) 1 [1,2,3]。在我的脑海里,1只加了一次,对吗? (可能不是,但我想知道如何/为什么!)。

我很困惑(也许造成了所有的困惑,哈哈)。谢谢!

最佳答案

(foldl.foldr) (+) 1 [[1,2,3],[4,5,6]]

变成了

foldl (foldr (+)) 1 [[1,2,3],[4,5,6]]

所以你得到了

foldl (foldr (+)) (foldr (+) 1 [1,2,3]) [[4,5,6]]

foldl第一步之后,或者

foldl (foldr (+)) 7 [[4,5,6]]

如果我们评估所应用的 foldr (除非严格性分析器启动,它实际上仍然是一个未评估的 thunk,直到 foldl 遍历了整个列表,但是下一个表达式在评估后更具可读性),这就变成了

foldl (foldr (+)) (foldr (+) 7 [4,5,6]) []

最后

foldl (foldr (+)) 22 []
~> 22

关于haskell - 折叠。 foldr 函数组合 - Haskell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14551982/

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