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