foldr :: (a -> b -> b) -> b -> [a] -> b foldr f v [] = v foldr f v (x:xs) = f x (foldr f v xs)
和
foldl :: (a -> b -> a) -> a -> [b] -> a foldl f v [] = v foldl f v (x:xs) = foldl f (f v x) xs
似乎使用了不同类型的递归。
在定义 foldr 和 foldl ?
foldr
foldl
谢谢。
foldl 使用尾部递归。
foldr 使用 保护递归 ,递归由 f 懒惰(如果有的话)。
f