簡體   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