javascript 折叠减少函数式编程

1 javascript functional-programming fold

在Javascript中,有一个reduce函数,它接受函数和数组,映射数组并返回函数返回的任何内容。

例如:

[1, 2, 3].reduce(function(acc, x) {
  acc += x 
  return acc;
}, 0); // 6 
Run Code Online (Sandbox Code Playgroud)

在 Haskell 中,有 Fold 对我来说也有同样的作用:

foldl (+) 0 [1,2,3]  -> 6
Run Code Online (Sandbox Code Playgroud)

如果我想创建这种函数作为库,可以安全地将其称为“折叠”而不是“减少”,两者之间有什么区别吗?

除了名称之外,这两个功能是否相同或有一些差异

我用不同的语言进行演示,因为Js没有foldl函数。

Car*_*ate 5

命名不一致,并且取决于语言。

在某些上下文中,例如 Kotlin,reduce不采用初始值,但fold会采用初始值。在 Haskell 中,有foldlfoldl1来区分这两种类型。在 Clojure 中,同一函数reduce具有不同的重载,用于获取初始值或不获取初始值。

它们基本上描述了相同的概念,我从未发现这两个名称之间有任何明显的区别。