Origen de nombres comunes de funciones de procesamiento de listas

11

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?

Disipador de calor
fuente
10
mapprovendrí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.
Aidan Cully
2
Lisp's mapcares un mapa, en el auto (en lugar del cdr).
fold tiene su nombre porque en teoría de conjuntos se llama catamorfismo, pero eso es absolutamente ridículo. También foldl es Aggregate en LINQ, nuevamente desde la terminología SQL.
Jimmy Hoffa
2
También tenga en cuenta que si bien esos idiomas no tienen ancestros comunes oficialmente, ha habido mucha influencia, de ida y vuelta. Guido van Rossum había hecho su tarea cuando comenzó a diseñar Python, y Scheme, Common Lisp, Perl y (IIRC) Haskell y ML ya estaban presentes en ese momento.
tdammers
1
filterhace exactamente eso: filtra los datos. Parece bastante obvio.
Dukeling

Respuestas:

3

La única palabra universal en su lista es mapy ya aparece en el documento original sobre Lisp en 1960 (bajo la apariencia de maplist). El papel también tiene search(AKA filter, AKA remove-if-not).

Creo que la razón que mapsoportó mientras que los otros tienen variantes es que mapproviene de matemáticas relativamente antiguas, establecidas, comunes y elementales, mientras que catamorphism(AKA reduceAKA fold& 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 ( filterAKA remove-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.

sds
fuente
1
No se refiera vagamente a la teoría de la categoría como "un dominio oscuro desarrollado recientemente", sino que también se trata de "recientemente desarrollado" como el cálculo de Lambda .
Dan D.
@DanD .: la palabra clave es relativamente
sds
Incluso entonces, todos se fastidiaron en .NET para que fueran similares a SQL. (mapa -> Seleccionar; filtro -> Dónde; doblar -> Agregado)
Steven Evers