Origine dei nomi comuni delle funzioni di elaborazione dell'elenco


11

Alcune funzioni di ordine superiore per operare su elenchi o array sono state ripetutamente adottate o reinventate. La mappa delle funzioni , piega [ l | r ] e filter si trovano insieme in diversi linguaggi di programmazione, come Scheme, ML e Python, che non sembrano avere un antenato comune. Vado con questi tre nomi per mantenere la domanda focalizzata.

Per mostrare che i nomi non sono universali, ecco un campionamento di nomi per funzionalità equivalente in altre lingue. C ++ ha trasformato invece di map e remove_if invece di filter (invertendo il significato del predicato). Lisp ha mapcar invece di map , remove-if-not invece di filter , e si riduce invece di fold (Alcune moderne varianti di Lisp hanno map ma questa sembra essere una forma derivata .) C # usa Select invece di map e Where invece difiltro . I nomi di C # provenivano da SQL tramite LINQ e, nonostante i cambiamenti di nome, la loro funzionalità era influenzata da Haskell, che a sua volta era influenzato da ML.

I nomi map , fold e filter sono diffusi, ma non universali. Ciò suggerisce che sono stati presi in prestito da una fonte influente in altre lingue contemporanee. Da dove vengono questi nomi di funzioni?


10
mapverrebbe dalla teoria dell'insieme matematico, che descrive le trasformazioni dell'insieme come "mappature" dal dominio di input all'intervallo di output.
Aidan Cully,

2
Lisp's mapcarè una mappa, sull'auto (piuttosto che sul CDR).

fold ha il suo nome perché nella teoria degli insiemi si chiama catamorfismo ma è assolutamente ridicolo. Anche foldl è aggregato in LINQ, sempre dalla terminologia SQL.
Jimmy Hoffa,

2
Nota anche che mentre quelle lingue non hanno ufficialmente antenati comuni, c'è stata molta influenza avanti e indietro. Guido van Rossum aveva fatto i compiti quando aveva iniziato a disegnare Python, e Scheme, Common Lisp, Perl e (IIRC) Haskell e ML erano già in circolazione al momento.
tdammers,

1
filterfa esattamente questo: filtra i dati. Sembra abbastanza ovvio.
Dukeling,

Risposte:


3

L'unica parola universale nella tua lista è mape appare già nel documento originale su Lisp nel 1960 (con il pretesto di maplist). L'articolo ha anche search(AKA filter, AKA remove-if-not).

Penso che la ragione mapsopportata mentre gli altri hanno varianti è quella che mapderiva da matematica relativamente antica, consolidata, comune ed elementare mentre catamorphism(AKA reduceAKA fold& c) è un concetto relativamente avanzato, da un dominio relativamente oscuro recentemente sviluppato (più o meno simultaneamente con CS) e fu introdotto (alla fine degli anni '80) quando fu disponibile in Lisp per oltre un decennio .reduce

Altri ( filterAKA remove-if-not) sono ancora più ad hoc in CS / programmazione, quindi le persone si sono sentite ancora più a proprio agio nel scegliere il proprio nome per loro.


1
Non riferirti vagamente alla teoria delle categorie come "un oscuro dominio recentemente sviluppato", ma è anche "recentemente sviluppato" come il calcolo Lambda .
Dan

@DanD .: la parola chiave è relativamente
sd

Anche allora, sono stati tutti infastiditi in .NET in modo da essere simili a SQL. (mappa -> Seleziona; filtro -> Dove; piega -> Aggregato)
Steven Evers
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.