通常称为reduce
的高阶函数在各种语言中都有很多同义词。
我可以想到:
foldr
,foldl
(a.k.a右折和左折)(Haskell)inject
(Smalltalk,Ruby,Groovy)Aggregate
(LINQ)accumulate
(Wikipedia)compress
(Wikipedia)是否有这个功能的所有不同名称的综合列表?如果没有,让我们在这里做一个。知道它会很有用。
我对从每种语言中获取库函数名称不太感兴趣,我正在寻找更多的口语,“如何在句子中使用”类型引用。
答案 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)foldr
,foldl
(a.k.a右折和左折)(Haskell,Scheme)inject
(Smalltalk,Ruby,Groovy)#inject:into
(Smalltalk)Aggregate
(LINQ)accumulate
(Wikipedia)compress
(Wikipedia)insertion
(FP)Insert
(J)感谢大家的帮助,如果有人稍后带着更好的清单,我会确保接受那个!
答案 3 :(得分:2)
还有几个:
foldr, foldl
(计划)reduce
(Python,Clojure,Common Lisp)#inject:into:
(Smalltalk)答案 4 :(得分:2)
Scala称他们为foldLeft
和foldRight
。它们也由符号/:
和:\
表示。
这些变种不会带种子。它们被称为reduceLeft
和reduceRight
。这些reduce*
的变体再次出现,不会在空序列上引发错误。他们被称为reduceLeftOption
和reduceRightOption
。
有些变化,遍历的方向无关紧要。它们被称为fold
和reduce
;首先是种子,第二种不是。
我本可以把它放在一张漂亮的桌子里。可惜stackoverflow不允许这样做。
答案 5 :(得分:0)
另一个
(希望你的讽刺探测器在......)