[英]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.