gpt4 book ai didi

haskell - 在这种情况下,haskell 中的 foldr 函数如何工作?

转载 作者:行者123 更新时间:2023-12-01 22:29:29 28 4
gpt4 key购买 nike

所以我是 haskell 的新手,我遇到了以下表达式,我不太明白它是如何工作的:文件夹 (.) (+3) [(*2), (+5)] 13它给出了结果:42现在我知道 foldr 通常在这样的例子中工作: foldr (+) 0 [1,2,3] 比如: (1+(2+( 0+3))) 但添加另一个函数 (.) 我有点困惑。所以,如果你们中的任何人能准确地向我解释 haskell 是如何解释这个表达式的,那就太好了,谢谢!

最佳答案

评论可能已经为您解决了这个问题。但是,如果不是:

(.) 是函数组合:

f . g
= \x -> f $ g $ x
= \x -> f (g x).

(* 2) 这样的形式是 \x -> x * 2 形式函数的糖分

现在,观察一下

foldr op base [a,b]

相同
a `op` (b `op` base)

当然,这也适用于更多参数。例如,

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

只是

1 + 2 + 3 + 4 + 5 + 0

在你的情况下,你问的是

foldr (.) (+3) [(*2), (+5)]

这是(对于 Integer)

(*2) . (+5) . (+3)
= \x -> (*2) $ (+5) $ (+3) $ x
= \x -> (*2) $ (+5) $ x + 3
= \x -> (*2) $ x + 3 + 5
= \x -> (x + 3 + 5) * 2
= \x -> x*2 + 16

等等

foldr (.) (+3) [(*2), (+5)] 13
= (\x -> x*2 + 16) 13
= 13*2 + 16
= 26 + 16
= 42

关于haskell - 在这种情况下,haskell 中的 foldr 函数如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57233949/

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