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?
quelle
map
würde aus der mathematischen Mengenlehre stammen, die Mengenumwandlungen als "Abbildungen" von der Eingabedomäne in den Ausgabebereich beschreibt.mapcar
ist eine Karte auf dem Auto (und nicht auf der CDR).filter
macht genau das - es filtert die Daten. Scheint ziemlich offensichtlich.Antworten:
Das einzige universelle Wort in Ihrer Liste ist
map
und es erscheint bereits 1960 in der Originalarbeit über Lisp (unter dem Deckmantel vonmaplist
). Das Papier hat auchsearch
(AKAfilter
, AKAremove-if-not
).Ich denke, der Grund, warum
map
die anderen Varianten haben, ist, dass ermap
aus einer relativ alten, etablierten, allgemeinen und elementaren Mathematik stammt, währendcatamorphism
(AKAreduce
AKAfold
& 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, alsreduce
es über ein Jahrzehnt in Lisp erhältlich war .Andere (
filter
AKAremove-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.quelle