Algunas funciones de orden superior para operar en listas o matrices se han adoptado o reinventado repetidamente. El mapa de funciones , pliegue [ l | r ], y el filtro se encuentran juntos en varios lenguajes de programación, como Scheme, ML y Python, que no parecen tener un ancestro común. Voy con estos tres nombres para mantener la pregunta enfocada.
Para mostrar que los nombres no son universales, aquí hay una muestra de nombres para la funcionalidad equivalente en otros idiomas. C ++ tiene transformación en lugar de mapa y remove_if en lugar de filtro (invirtiendo el significado del predicado). Lisp tiene mapcar en lugar de map , remove-if-not en lugar de filter y reduce en lugar de fold (Algunas variantes modernas de Lisp tienen map pero parece ser una forma derivada ). C # usa Select en lugar de map y Where en lugar defiltro . Los nombres de C # provienen de SQL a través de LINQ y, a pesar de los cambios de nombre, su funcionalidad fue influenciada por Haskell, que también fue influenciada por ML.
Los nombres de mapa , pliegue y filtro están muy extendidos, pero no son universales. Esto sugiere que fueron tomados prestados de una fuente influyente a otros idiomas contemporáneos. ¿De dónde vienen estos nombres de funciones?
fuente
map
provendría de la teoría matemática de conjuntos, que describe las transformaciones de conjuntos como "asignaciones" del dominio de entrada al rango de salida.mapcar
es un mapa, en el auto (en lugar del cdr).filter
hace exactamente eso: filtra los datos. Parece bastante obvio.Respuestas:
La única palabra universal en su lista es
map
y ya aparece en el documento original sobre Lisp en 1960 (bajo la apariencia demaplist
). El papel también tienesearch
(AKAfilter
, AKAremove-if-not
).Creo que la razón que
map
soportó mientras que los otros tienen variantes es quemap
proviene de matemáticas relativamente antiguas, establecidas, comunes y elementales, mientras quecatamorphism
(AKAreduce
AKAfold
& c) es un concepto relativamente avanzado, de un dominio relativamente oscuro recientemente desarrollado (más o menos simultáneamente con CS) , y se introdujo (a fines de la década de 1980) cuando estuvo disponible en Lisp durante más de una década .reduce
Otros (
filter
AKAremove-if-not
) son aún más ad hoc en CS / programación, por lo que la gente se sintió aún más cómoda eligiendo su propio nombre para ellos.fuente