重复采用或重新发明了一些用于对列表或数组进行操作的高阶函数。功能映射,折叠 [ l | r ]和filter是在几种编程语言中一起发现的,例如Scheme,ML和Python,它们似乎没有共同的祖先。我将使用这三个名称来使问题集中。
为了表明名称不是通用的,这里是其他语言等效功能的名称示例。C ++ 转换而不是map,而remove_if而不是filter(颠倒了谓词的含义)。Lisp使用mapcar代替map,使用remove-if-not代替filter,并用reduce代替fold(某些现代Lisp变体具有map,但这似乎是派生形式。)C#使用Select代替map,而Where代替过滤器。C#的名称来自SQL,是通过LINQ进行的,尽管更改了名称,但其功能却受到Haskell的影响,而Haskell本身也受到ML的影响。
map,fold和filter的名称很普遍,但并不通用。这表明它们是从有影响力的来源借用到其他当代语言的。这些函数名称从何而来?
Lisp
mapcar
是汽车上的地图(而不是CDR)。
fold之所以得名,是因为在集合论中,它被称为“变形”,但这绝对是荒谬的。同样,foldl是LINQ中的Aggregate,同样来自SQL术语。
—
Jimmy Hoffa
还要注意,尽管这些语言在官方上没有共同的祖先,但绝对会有很多来回影响。Guido van Rossum在开始设计Python时就完成了功课,Scheme,Common Lisp,Perl和(IIRC)Haskell和ML当时已经存在。
—
tdammers
filter
正是这样做的-它过滤数据。似乎很明显。
map
将来自数学集合论,该理论将集合变换描述为从输入域到输出范围的“映射”。