由于我是“最里面,最外面”的新手,因此我在理解最左邊最外面的樣式時遇到了問題。
我想了解清單的減少程序 [5,2,1]
foldl :: ( b -> a -> b ) -> b -> [ a ] -> b
foldl _ e [] = e
foldl f e (x:xs) = foldl f (f e x) xs
foldl (\acc x -> acc [negate x]) [] [5,2,1]
uj5u.com熱心網友回復:
您可以行內定義以更好地了解正在發生的事情。
foldl (\acc x -> acc [negate x]) [] [5,2,1]
-- using foldl f e (x:xs) = foldl f (f e x) xs
-- with f = (\acc x -> acc [negate x])
-- e = []
-- x = 5
-- xs = [2,1]
-- replace line 1 with foldl f (f e x) xs
foldl f (f [] 5) [2,1]
foldl f (f (f [] 5) 2) [1]
foldl f (f (f (f [] 5) 2) 1) []
-- using foldl _ e [] = e
f (f (f [] 5) 2) 1
-- in infix style (f [] 5 == [] `f` 5)
(([] `f` 5) `f` 2) `f` 1
一般來說
foldl ( ) 0 [a, b, c] == ((0 a) b) c
foldr ( ) 0 [a, b, c] == a (b (c 0))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/374164.html
標籤:哈斯克尔
下一篇:三對對點免點方式
