Niektóre funkcje wyższego rzędu do pracy na listach lub tablicach były wielokrotnie adoptowane lub wymyślane na nowo. Funkcje map , fold [ l | r ] i filtr znajdują się razem w kilku językach programowania, takich jak Scheme, ML i Python, które nie wydają się mieć wspólnego przodka. Idę z tymi trzema nazwiskami, aby skupić się na pytaniu.
Aby pokazać, że nazwy nie są uniwersalne, oto próbka nazw dla równoważnej funkcjonalności w innych językach. C ++ przekształcił zamiast map i remove_if zamiast filter (odwraca znaczenie predykatu). Lisp ma mapcar zamiast mapy , usuń, jeśli nie zamiast filtru i zmniejsz zamiast składania (niektóre nowoczesne warianty Lisp mają mapę, ale wydaje się, że jest to forma pochodna ). C # używa Wybierz zamiast mapy i Gdzie zamiastfiltruj . Nazwy C # pochodzą z SQL za pośrednictwem LINQ i pomimo zmian nazw, na ich funkcjonalność miał wpływ Haskell, na który sam miał wpływ ML.
Nazwy map , fold i filter są powszechne, ale nie uniwersalne. Sugeruje to, że zostały one zapożyczone z wpływowego źródła na inne współczesne języki. Skąd pochodzą te nazwy funkcji?
źródło
map
pochodziłby z matematycznej teorii zbiorów, która opisuje transformacje zbiorów jako „odwzorowania” z dziedziny wejściowej na zakres wyjściowy.mapcar
to mapa na samochodzie (a nie cdr).filter
robi dokładnie to - filtruje dane. Wydaje się to dość oczywiste.Odpowiedzi:
Jedynym uniwersalnym słowem na twojej liście jest
map
i pojawia się już w oryginalnej pracy Lisp z 1960 roku (pod pozoremmaplist
). Artykuł ma równieżsearch
(AKAfilter
, AKAremove-if-not
).Myślę, że powodem
map
, dla którego pozostałe istniały, jest wariant, którymap
pochodzi ze stosunkowo starożytnej, ustalonej, wspólnej i elementarnej matematyki, podczas gdycatamorphism
(AKAreduce
AKAfold
i c) jest stosunkowo zaawansowaną koncepcją, z stosunkowo niejasnej, niedawno opracowanej (mniej więcej jednocześnie z CS) domeny i został wprowadzony (pod koniec lat 80-tych), kiedyreduce
był dostępny w Lisp od ponad dekady .Inni (
filter
AKAremove-if-not
) są jeszcze bardziej ad hoc w CS / programowaniu, więc ludzie czuli się jeszcze bardziej swobodnie wybierając dla nich własne imię.źródło