9

La función de orden superior conocida como reduce tiene muchos sinónimos en varios idiomas.Lista completa de sinónimos para reducir

De la parte superior de mi cabeza se me ocurre:

  • foldr, foldl (también conocido como derecho de plegar y pliegue izquierda) (Haskell)
  • inject (Smalltalk, Ruby, Groovy)
  • Aggregate (LINQ)
  • accumulate (Wikipedia)
  • compress (Wikipedia)

¿Hay una lista completa de todos los nombres que tiene esta función? Si no, hagamos uno aquí. Sería útil saber

No estoy demasiado interesado en obtener los nombres de las funciones de la biblioteca de cada idioma, estoy buscando más de una referencia de tipo coloquial, "cómo se usa en una oración".

Respuesta

5

bien, hasta el momento la lista total parece ser:

  • catamorphism (término general, see Kristopher's post)
  • reduce (Python, Clojure, Common Lisp, Ruby)
  • reduction (APL)
  • foldr, foldl (akun pliegue derecha y pliegue izquierda) (Haskell, Esquema)
  • inject (Smalltalk, Ruby, Groovy)
  • #inject:into (Smalltalk)
  • Aggregate (LINQ)
  • accumulate (Wikipedia)
  • compress (Wikipedia)
  • insertion (FP)
  • Insert (J)

Gracias por la ayuda de todos, y si alguien viene después con una lista mejor, ¡me aseguraré de aceptarla!

+0

Reducción de APL (/) fue renombrado Insertar en J (http://www.jsoftware.com/help/dictionary/d420.htm). Un incentivo para dicho cambio de nombre es que Insert puede producir resultados que no implican reducción. Algunas notas sobre el historial de este operador aparecen en "A Personal View of APL" (http://www.jsoftware.com/papers/APLPersonalView.htm) – kaleidic

+0

¡Gracias! Lo pondré en –

2

Un par más:

  • foldr, foldl (Esquema)
  • reduce (Python, Clojure, Common Lisp)
  • #inject:into: (Smalltalk)
5

De "A tutorial on the universality and expressiveness of fold":

El operador veces tiene sus orígenes en la teoría de la repetición (Kleene, 1952), mientras que el uso de pliegue como un concepto central en un lenguaje de programación fechas de nuevo a la reducción operador de APL (Iverson, 1962), y más tarde al inserción operador de FP (Backus, 1978).

+0

Excelente, parece 'reducir 'en realidad es el término original. –

2

Scala los llama foldLeft y foldRight. También están representados por los símbolos /: y :\.

Hay variaciones de estos que no toman una semilla. Se conocen como reduceLeft y reduceRight. Hay variaciones de estos reduce* que no arrojan errores en una secuencia vacía. Se llaman reduceLeftOption y reduceRightOption.

Existen variaciones en las que la dirección de recorrido no importa de ninguna manera. Se llaman fold y reduce; primero toma una semilla, la segunda no.

Podría haber puesto esto en una buena mesa. Pity stackoverflow no permitirá eso.

0

Otro

  • foldl'(Haskell, como foldl, pero funciona en listas más largas)

(espero que su detector de ironía estaba en ....)

Cuestiones relacionadas