通常称为的高阶函数reduce在各种语言中有很多同义词。
在我的脑海中,我能想到:
foldr,foldl(又名右折和左折)(Haskell)inject(Smalltalk、Ruby、Groovy)Aggregate(LINQ)accumulate(维基百科)compress(维基百科)
是否有该函数所有不同名称的完整列表?如果没有,让我们在这里做一个。知道会很有用。
我对从每种语言中获取库函数名称不太感兴趣,我正在寻找更多的口语,“它如何在句子中使用”类型参考。
您可能会注意到,一般来说,这个概念被称为catamorphism。 来自 wikipedia,或者还有可爱的文章使用香蕉、镜头、信封和铁丝网进行函数式编程。
好吧,到目前为止,总清单似乎是:
catamorphism(通用术语,见 Kristopher 的帖子)reduce(Python、Clojure、Common Lisp、Ruby)reduction(APL)foldr, foldl(又名右折和左折)(Haskell,Scheme)inject(Smalltalk、Ruby、Groovy)#inject:into(短暂聊天)Aggregate(LINQ)accumulate(维基百科)compress(维基百科)insertion(FP)Insert(J)感谢大家的帮助,如果以后有人提供更好的列表,我将确保接受该列表!
来自《关于 fold 的普遍性和表现力的教程》:
折叠运算符起源于递归理论 (Kleene, 1952),而在编程语言中使用折叠作为中心概念可以追溯到 APL 的归约运算符 (Iverson, 1962),然后是 FP的插入运算符(巴克斯,1978 年)。
Scala 称它们为foldLeft和foldRight. 它们也由符号/:和表示:\。
这些有一些不带种子的变体。它们被称为reduceLeft和reduceRight。还有一些变体reduce*不会在空序列上引发错误。它们被称为reduceLeftOption和reduceRightOption。
有一些变体,无论哪种方式,遍历的方向都无关紧要。它们被称为foldand reduce; 第一个有种子,第二个没有。
我本可以把它放在一张漂亮的桌子上。可惜stackoverflow不允许这样做。
还有几个:
foldr, foldl(方案)reduce(Python、Clojure、Common Lisp)#inject:into:(短暂聊天)另一个
(希望你的反讽检测器已经打开......)