Ursprung der gebräuchlichen Namen von Listenverarbeitungsfunktionen

11

Einige Funktionen höherer Ordnung für die Bearbeitung von Listen oder Arrays wurden wiederholt übernommen oder neu erfunden. Die Funktionen ordnen , falten [ l | r ] und Filter befinden sich zusammen in mehreren Programmiersprachen wie Scheme, ML und Python, die keinen gemeinsamen Vorfahren zu haben scheinen. Ich gehe mit diesen drei Namen, um die Frage fokussiert zu halten.

Um zu zeigen, dass die Namen nicht universell sind, finden Sie hier eine Auswahl von Namen für äquivalente Funktionen in anderen Sprachen. C ++ hat Transformation anstelle von map und remove_if anstelle von filter (Umkehrung der Bedeutung des Prädikats). Lisp hat mapcar statt Karte , remove-wenn-nicht statt Filter und reduzieren statt Falte (Einige moderne Lisp - Varianten haben Karte aber dies scheint eine zu sein abgeleitete Form .) C # Anwendungen Wählen Sie statt Karte und Wo stattFilter . Die Namen von C # stammten aus SQL über LINQ , und trotz der Namensänderungen wurde ihre Funktionalität von Haskell beeinflusst, das selbst von ML beeinflusst wurde.

Die Namen Map , Fold und Filter sind weit verbreitet, aber nicht universell. Dies deutet darauf hin, dass sie aus einer einflussreichen Quelle in andere zeitgenössische Sprachen entlehnt wurden. Woher kommen diese Funktionsnamen?

Kühlkörper
quelle
10
mapwürde aus der mathematischen Mengenlehre stammen, die Mengenumwandlungen als "Abbildungen" von der Eingabedomäne in den Ausgabebereich beschreibt.
Aidan Cully
2
Lisp's mapcarist eine Karte auf dem Auto (und nicht auf der CDR).
fold hat seinen Namen, weil es in der Mengenlehre Katamorphismus heißt, aber das ist einfach absolut lächerlich. Foldl ist auch Aggregate in LINQ, wiederum aus der SQL-Terminologie.
Jimmy Hoffa
2
Beachten Sie auch, dass diese Sprachen zwar offiziell keine gemeinsamen Vorfahren haben, es aber absolut viel Einfluss gegeben hat, hin und her. Guido van Rossum hatte seine Hausaufgaben gemacht, als er anfing, Python zu entwerfen, und Scheme, Common Lisp, Perl und (IIRC) Haskell und ML waren zu dieser Zeit bereits da.
tdammers
1
filtermacht genau das - es filtert die Daten. Scheint ziemlich offensichtlich.
Dukeling

Antworten:

3

Das einzige universelle Wort in Ihrer Liste ist mapund es erscheint bereits 1960 in der Originalarbeit über Lisp (unter dem Deckmantel von maplist). Das Papier hat auch search(AKA filter, AKA remove-if-not).

Ich denke, der Grund, warum mapdie anderen Varianten haben, ist, dass er mapaus einer relativ alten, etablierten, allgemeinen und elementaren Mathematik stammt, während catamorphism(AKA reduceAKA fold& c) ein relativ fortgeschrittenes Konzept ist, aus einer relativ obskuren, kürzlich entwickelten (mehr oder weniger gleichzeitig mit CS) Domäne und es wurde (Ende der 1980er Jahre) eingeführt, als reducees über ein Jahrzehnt in Lisp erhältlich war .

Andere ( filterAKA remove-if-not) sind in Bezug auf CS / Programmierung noch ad hoc, sodass sich die Leute noch wohler fühlten, wenn sie ihren eigenen Namen für sie auswählten.

sds
quelle
1
Beziehen Sie sich nicht vage auf die Kategorietheorie als "eine obskure kürzlich entwickelte Domäne", sie ist auch ungefähr so ​​"kürzlich entwickelt" wie die Lambda-Rechnung .
Dan D.
@ DanD.: Das Schlüsselwort ist relativ
sds
Selbst dann wurden sie alle in .NET durcheinander gebracht, so dass sie SQL ähnlich waren. (Karte -> Select, Filter -> Wo; falten -> Aggregate)
Steven Evers