reduce的同义词综合列表

时间:2012-06-04 02:10:31

标签: language-agnostic programming-languages functional-programming fold

通常称为reduce的高阶函数在各种语言中都有很多同义词。

我可以想到:

  • foldrfoldl(a.k.a右折和左折)(Haskell)
  • inject(Smalltalk,Ruby,Groovy)
  • Aggregate(LINQ)
  • accumulateWikipedia
  • compressWikipedia

是否有这个功能的所有不同名称的综合列表?如果没有,让我们在这里做一个。知道它会很有用。

我对从每种语言中获取库函数名称不太感兴趣,我正在寻找更多的口语,“如何在句子中使用”类型引用。

6 个答案:

答案 0 :(得分:7)

您可能会注意到,通常,此概念称为 catamorphism From wikipedia,或者可爱的文章Functional programming with Bananas, Lenses, Envelopes and Barbed Wire

答案 1 :(得分:5)

来自“A tutorial on the universality and expressiveness of fold”:

  

折叠算子起源于递归理论(Kleene,1952),   而使用折叠作为编程语言的核心概念   可以追溯到APL的减少运算符(Iverson,1962),以及之后   到FP(Backus, 1978)的插入运算符。

答案 2 :(得分:5)

好的,到目前为止总列表似乎是:

  • catamorphism(一般术语,see Kristopher's post
  • reduce(Python,Clojure,Common Lisp,Ruby)
  • reduction(APL)
  • foldrfoldl(a.k.a右折和左折)(Haskell,Scheme)
  • inject(Smalltalk,Ruby,Groovy)
  • #inject:into(Smalltalk)
  • Aggregate(LINQ)
  • accumulateWikipedia
  • compressWikipedia
  • insertion(FP)
  • Insert(J)

感谢大家的帮助,如果有人稍后带着更好的清单,我会确保接受那个!

答案 3 :(得分:2)

还有几个:

  • foldr, foldl(计划)
  • reduce(Python,Clojure,Common Lisp)
  • #inject:into:(Smalltalk)

答案 4 :(得分:2)

Scala称他们为foldLeftfoldRight。它们也由符号/::\表示。

这些变种不会带种子。它们被称为reduceLeftreduceRight。这些reduce*的变体再次出现,不会在空序列上引发错误。他们被称为reduceLeftOptionreduceRightOption

有些变化,遍历的方向无关紧要。它们被称为foldreduce;首先是种子,第二种不是。

我本可以把它放在一张漂亮的桌子里。可惜stackoverflow不允许这样做。

答案 5 :(得分:0)

另一个

  • foldl'(Haskell,与foldl一样,但适用于较长的列表)

(希望你的讽刺探测器在......)