繁体   English   中英

Lambda 函数在 Haskell 中的工作原理

[英]How Lambda function works in Haskell

我是 Haskell 的新手,在处理小程序时,我发现对 lambda 函数的功能没有什么困惑。

lastThat :: (a -> Bool) -> a -> [a] -> a   
lastThat f = foldl (\x acc -> if f x then x else acc)

执行lastThat (>0) 100 [-1,-4,5,7,9,-10]我得到 100 。 使用以下定义时

lastThat :: (a -> Bool) -> a -> [a] -> a   
lastThat f = foldl (\acc x -> if f x then x else acc)

& 然后执行lastThat (>0) 100 [-1,-4,5,7,9,-10]我按预期得到了 9。

为什么它不适用于第一个定义?

foldl 和 foldr 都从左到右遍历列表,但不同的是 foldl 是左关联,而 foldr 是右关联

作为列表给出 (xs)

xs = 1, 2, 3, ....., n

像 foldl 一样思考将初始值放在左侧并将括号关联到左侧。

acc = 0
op = +
(((...(0 + 1) + 2) + 3) + 4) ..... + n)

foldr 将初始值放在右侧,并将括号关联到右侧。

acc = 0
op = +
(1 + (2 + (3 + ......+ (n + 0)))...)))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM