首页 > 其他分享 >fold

fold

时间:2023-04-11 09:14:17浏览次数:44  
标签:acc scanl foldr 累加器 列表 fold foldl

  • 一个fold接受一个二元函数,一个初始值(累加器)和一个要折叠的列表
  • 二元函数本身有两个参数
  • 使用初始值(累加器)和第一个(或最后一个)元素调用二元函数,生成的结果作为新的累加器
  • 然后用新的累加器和列表中新的第一项重新调用二元函数,依此类推
  • 最后只剩下一个累加器

foldl

如下

sum' = foldl (\ acc x -> acc + x) 0
elem' e = foldl (\ acc x -> if x == e then True else acc) False

foldr

如下

map' f = foldr (\ x acc -> f x : acc) []
  • foldr适用于无限列表,而foldl则不行
  • foldr会到达列表的开头,foldr则永远不会到达终点

fold在列表中逐项循环,然后返回一个值。当你想要遍历一个列表并返回一个值时,就可以使用fold

foldl1、foldr1

  • foldl1和foldr1函数与foldl和foldr非常相似,只是不需要输入起始值
  • 它们假设列表中的第一项(或最后一项)是开始值,然后开始按下一项折叠列表

foldl (flip (

标签:acc,scanl,foldr,累加器,列表,fold,foldl
From: https://www.cnblogs.com/muyangui/p/17305019.html

相关文章