通用列表处理功能名称的由来


11

重复采用或重新发明了一些用于对列表或数组进行操作的高阶函数。功能映射折叠 [ 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的影响。

mapfoldfilter的名称很普遍,但并不通用。这表明它们是从有影响力的来源借用到其他当代语言的。这些函数名称从何而来?


10
map将来自数学集合论,该理论将集合变换描述为从输入域到输出范围的“映射”。
艾丹·库利(Aidan Cully)

2
Lisp mapcar汽车上的地图(而不是CDR)。

fold之所以得名,是因为在集合论中,它被称为“变形”,但这绝对是荒谬的。同样,foldl是LINQ中的Aggregate,同样来自SQL术语。
Jimmy Hoffa

2
还要注意,尽管这些语言在官方上没有共同的祖先,但绝对会有很多来回影响。Guido van Rossum在开始设计Python时就完成了功课,Scheme,Common Lisp,Perl和(IIRC)Haskell和ML当时已经存在。
tdammers

1
filter正是这样做的-它过滤数据。似乎很明显。
2013年

Answers:


3

您列表中唯一的通用词是map,它已经出现在1960年关于Lisp的原始论文中(以的名义maplist)。该文件也有search(AKA filter,AKA remove-if-not)。

我想原因map忍受,而另一些变种是map来自相对古老,建立共同和基本的数学,而catamorphism(AKA reduceAKA fold&C)是一种比较先进的理念,从一个相对湮没所最近开发(更多或CS同时更少),并于1980年代末 reduce在Lisp中使用了十多年

其他人(filterAKA remove-if-not)在CS /编程中更特别,因此人们为自己选择自己的名字感到更加自在。


1
不要模糊地将类别理论称为“一个模糊的新近发展的领域”,它也与Lambda微积分一样是“最近发展的” 。
Dan D.

@ DanD:关键词是相对的
sds

即使那样,它们都在.NET中被窃听,因此它们将类似于SQL。(地图->选择;过滤器->位置;折叠->汇总)
史蒂文·埃弗斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.