一般的なリスト処理関数名の由来


11

リストまたは配列を操作するためのいくつかの高階関数が繰り返し採用または再発明されました。関数mapfold [ l | r ]とfilterは、Scheme、ML、Pythonなど、共通の祖先を持たないように見えるいくつかのプログラミング言語で一緒に見つかります。質問を集中させるために、これら3つの名前を使用します。

名前が普遍的ではないことを示すために、他の言語での同等の機能の名前のサンプルを以下に示します。C ++はい変換するのではなく、マップremove_ifの代わりに、フィルタ(述語の意味を反転させます)。Lispは持っているでmapcarの代わりに、マップを削除-IF-ない代わりに、フィルタ、および軽減の代わり(一部現代のLispが持っているバリアントマップが、これが表示されますがために派生形。)C#の用途は選択の代わりにマップし、どこの代わりに、フィルター。C#の名前はLINQを介してSQLに由来し、名前の変更にもかかわらず、それらの機能はMLの影響を受けたHaskellの影響を受けました。

mapfold、およびfilterという名前は広く普及していますが、普遍的ではありません。これは、彼らが有力な情報源から他の現代の言語に借用されたことを示唆しています。これらの関数名はどこから来たのですか?


10
mapは、入力ドメインから出力範囲への「マッピング」としてセット変換を説明する数学的セット理論に由来します。
エイダンカリー2013

2
Lisp mapcarは(cdrではなく)上のマップです。

foldは、セット理論ではカタモルフィズムと呼ばれているため、その名前が付けられましたが、それはまったくとんでもないことです。また、foldlもLINQのAggregateです。これもSQL用語です。
ジミーホファ2013

2
また、これらの言語には共通の祖先は公式にはありませんが、前後に大きな影響があったことにも注意してください。Guido van Rossumは、Pythonの設計を始めたときの宿題を終えていました。Scheme、Common Lisp、Perl、および(IIRC)HaskellとMLは、すでにその頃にありました。
tdammers 2013

1
filterまさにそれを行います-それはデータをフィルタリングします。かなり明白なようです。
2013

回答:


3

あなたのリストの唯一の普遍的な単語はでmapあり、それは1960のLispに関するオリジナルの論文(の名の下でmaplist)にすでに現れています。この論文にはsearch(AKA filter、AKA remove-if-not)もあります。

私は理由が思うmap他の人がバリアントを持っていながら、それがある耐えたmapから来て、比較的古く、設立され、共通&初等数学しばらくcatamorphism(AKA reduceAKA fold&C)は比較的から高度な概念は、比較的最近開発不明瞭(多かれ少なかれ同時にCSで)ドメイン、そしてそれは10年reduce以上にわたってLispで利用可能になったときに(1980居住後期に)導入さ れました。

他の人(filterAKA remove-if-not)は、CS /プログラミングにおいてさらに臨機応変です。そのため、人々は自分の名前を付けるのがさらに快適に感じました。


1
カテゴリ理論を漠然として「あいまいな最近開発されたドメイン」と呼ぶのではなく、ラムダ計算と同じくらい「最近開発された」ものです。
Dan D.

@DanD .:キーワードは比較的
sds

それでも、すべてが.NETにバグを抱えているため、SQLに似ています。(マップ->選択、フィルター->場所、折りたたみ->集計)
Steven Evers '15
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.