Pochodzenie popularnych nazw funkcji przetwarzających listy

11

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?

Radiator
źródło
10
mappochodziłby z matematycznej teorii zbiorów, która opisuje transformacje zbiorów jako „odwzorowania” z dziedziny wejściowej na zakres wyjściowy.
Aidan Cully
2
Lisp's mapcarto mapa na samochodzie (a nie cdr).
fold ma swoją nazwę, ponieważ w teorii mnogości nazywa się to katamorfizmem, ale to jest absolutnie śmieszne. Również foldl jest agregacją w LINQ, ponownie z terminologii SQL.
Jimmy Hoffa
2
Zauważ też, że chociaż języki te oficjalnie nie mają wspólnych przodków, absolutnie duży wpływ miał tam iz powrotem. Guido van Rossum odrobił pracę domową, kiedy zaczął projektować Pythona, a Scheme, Common Lisp, Perl i (IIRC) Haskell i ML już byli w tym czasie.
tdammers
1
filterrobi dokładnie to - filtruje dane. Wydaje się to dość oczywiste.
Dukeling

Odpowiedzi:

3

Jedynym uniwersalnym słowem na twojej liście jest mapi pojawia się już w oryginalnej pracy Lisp z 1960 roku (pod pozorem maplist). Artykuł ma również search(AKA filter, AKA remove-if-not).

Myślę, że powodem map, dla którego pozostałe istniały, jest wariant, który mappochodzi ze stosunkowo starożytnej, ustalonej, wspólnej i elementarnej matematyki, podczas gdy catamorphism(AKA reduceAKA foldi 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), kiedy reducebył dostępny w Lisp od ponad dekady .

Inni ( filterAKA remove-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ę.

sds
źródło
1
Nie odzywaj się niejasno do teorii kategorii jako „niejasnej niedawno opracowanej dziedziny”, jest ona tak samo „niedawno rozwinięta” jak rachunek Lambda .
Dan D.
@DanD .: słowo kluczowe jest względnie
sds
Nawet wtedy wszyscy mieli błędy w .NET, dzięki czemu byliby podobni do SQL. (mapa -> Wybierz; filtr -> Gdzie; złóż -> Agreguj)
Steven Evers