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 où 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?
la source
map
proviendrait 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.mapcar
est une carte, sur la voiture (plutôt que le cdr).filter
fait exactement cela - il filtre les données. Semble assez évident.Réponses:
Le seul mot universel dans votre liste est
map
et il apparaît déjà dans l'article original sur Lisp en 1960 (sous le couvert demaplist
). Le journal a égalementsearch
(AKAfilter
, AKAremove-if-not
).Je pense que la raison a
map
enduré pendant que les autres ont des variantes est quemap
vient de relativement ancienne, établie, commun et mathématiques élémentaires toutcatamorphism
(AKAreduce
AKAfold
& 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'ilreduce
était disponible à Lisp depuis plus d'une décennie .D'autres (
filter
AKAremove-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.la source