Origine des noms de fonction de traitement de liste courants

11

Certaines fonctions d'ordre supérieur pour fonctionner sur des listes ou des tableaux ont été adoptées ou réinventées à plusieurs reprises. La carte des fonctions , fold [ l | r ], et filter se trouvent ensemble dans plusieurs langages de programmation, tels que Scheme, ML et Python, qui ne semblent pas avoir un ancêtre commun. Je vais avec ces trois noms pour garder la question ciblée.

Pour montrer que les noms ne sont pas universels, voici un échantillon de noms pour des fonctionnalités équivalentes dans d'autres langues. C ++ a transformé au lieu de map et remove_if au lieu de filtre (inversant la signification du prédicat). Lisp a mapcar au lieu de la carte , supprimer, si non pas au lieu de filtre , et réduire au lieu de pli (LISP moderne variantes ont carte , mais cela semble être une forme dérivée .) C # utilisations Sélectionnez au lieu de la carte et au lieu defiltre . Les noms de C # provenaient de SQL via LINQ , et malgré les changements de nom, leur fonctionnalité a été influencée par Haskell, lui-même influencé par ML.

Les noms map , fold et filter sont répandus, mais pas universels. Cela suggère qu'ils ont été empruntés à une source influente dans d'autres langues contemporaines. D'où viennent ces noms de fonction?

Dissipateur de chaleur
la source
10
mapproviendrait de la théorie mathématique des ensembles, qui décrit les transformations d'ensemble comme des «mappages» du domaine d'entrée à la plage de sortie.
Aidan Cully
2
Lisp mapcarest une carte, sur la voiture (plutôt que le cdr).
fold a son nom parce que dans la théorie des ensembles, cela s'appelle le catamorphisme, mais c'est tout simplement ridicule. Foldl est également agrégé dans LINQ, toujours à partir de la terminologie SQL.
Jimmy Hoffa
2
Notez également que même si ces langues n'ont pas officiellement d'ancêtres communs, il y a eu énormément d'influence, dans les deux sens. Guido van Rossum avait fait ses devoirs quand il a commencé à concevoir Python, et Scheme, Common Lisp, Perl et (IIRC) Haskell et ML étaient déjà là à l'époque.
tdammers
1
filterfait exactement cela - il filtre les données. Semble assez évident.
Dukeling

Réponses:

3

Le seul mot universel dans votre liste est mapet il apparaît déjà dans l'article original sur Lisp en 1960 (sous le couvert de maplist). Le journal a également search(AKA filter, AKA remove-if-not).

Je pense que la raison a mapenduré pendant que les autres ont des variantes est que mapvient de relativement ancienne, établie, commun et mathématiques élémentaires tout catamorphism(AKA reduceAKA fold& c) est un relativement concept avancé, d'un relativement développé récemment Obscure (plus ou moins simultanément avec CS) domaine , et il a été introduit (à la fin des années 80) lorsqu'il reduceétait disponible à Lisp depuis plus d'une décennie .

D'autres ( filterAKA remove-if-not) sont encore plus ad hoc en CS / programmation, donc les gens se sentaient encore plus à l'aise de choisir leur propre nom pour eux.

sds
la source
1
Ne vous référez pas vaguement à la théorie des catégories comme "un domaine obscur récemment développé", il est aussi à peu près aussi "récemment développé" que le calcul Lambda .
Dan D.
@DanD .: le mot clé est relativement
sds
Même alors, ils ont tous été bogués dans .NET afin qu'ils soient similaires à SQL. (carte -> Sélectionner; filtrer -> Où; plier -> Agrégat)
Steven Evers