Differences Between `Foldl` and `Foldr`
2 days ago
- foldl 和 foldr 都从左到右遍历列表;区别在于结合性(左结合与右结合)。
- 在严格语言中,foldl 是尾递归的,使用常量空间;foldr 需要线性栈空间。
- 在惰性语言(如 Haskell)中,foldl 会构建大型 thunk,因此对于严格函数应使用 foldl' 以获得常量空间。
- foldr 可以是惰性的:如果组合函数对其第二个参数是惰性的,它可以增量工作,并且可以处理无限列表。
- 列表的一般规则:对于严格操作使用 foldl',对于惰性第二参数使用 foldr;避免使用普通 foldl 或 foldr'。
- 这些规则特定于列表;其他数据结构可能需要不同的选择(例如 snoc 列表)。