Haskell趣学指南-学习笔记(11)

fold

一个 fold 取一个二元函数,一个初始值 ( 我喜欢管它叫累加值 ) 和一个需要折叠的 List。这个二元函数有两个参数,即累加 值和 List 的首项 ( 或尾项 ) ,回传值是新的累加值。然后,以新的累加值和新的 List 首项调用该函数,如是继续。到 List 遍历 完毕时,只剩下一个累加值,也就是最终的结果。

 foldl做折叠函数

它从 List 的左端开始折叠,用初始值和 List 的头部调用这二元函数,得一新的累加值,并用新的累加值与 List 的下一个元素调用二元函数。如是继续。 (acc指代什么?acc指代初始值(又叫累加值))
sum' :: (Num a) => [a] -> a
sum' xs = foldl (\acc x -> acc + x)

 同时这个sum'的写法还可以简化(柯里化)

sum' :: (Num a) => [a] -> a
sum' = foldl (+) 0

又一个例子:

elem' :: (Eq a) => a -> [a] -> Bool
elem' y ys = foldl (\acc x -> if x == y then True else acc) False ys

foldr右折叠函数

map' :: (a -> b) -> [a] -> [b]
map' f xs = foldr (\x acc -> f x : acc) [] xs
ghci> map' (+3) [1..3]
[6,5,4]

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值