9

Die Funktion höherer Ordnung, die typischerweise als reduce bekannt ist, hat viele Synonyme in verschiedenen Sprachen.Umfassende Liste von Synonymen für reduzieren

Aus der Spitze von meinem Kopf kann ich mich vorstellen:

  • foldr, foldl (aka rechts falten und links-fach) (Haskell)
  • inject (Smalltalk, Ruby, Groovy)
  • Aggregate (LINQ)
  • accumulate (Wikipedia)
  • compress (Wikipedia)

Gibt es eine umfassende Liste aller verschiedenen Namen, die diese Funktion hat? Wenn nicht, lass uns eins machen. Es wäre nützlich zu wissen.

Ich bin nicht zu sehr daran interessiert, die Bibliothek Funktionsnamen aus jeder Sprache zu bekommen, ich suche eher eine umgangssprachliche, "wie ist es in einem Satz verwendet" Typ Referenz.

Antwort

5

In Ordnung, so weit die gesamte Liste zu sein scheint:

  • catamorphism (Allgemeiner Begriff, see Kristopher's post)
  • reduce (Python, Clojure, Common Lisp, Rubin)
  • reduction (APL)
  • foldr, foldl (akeine rechte Falte und links-fach) (Haskell, Scheme)
  • inject (Smalltalk, Ruby, Groovy)
  • #inject:into (Smalltalk)
  • Aggregate (LINQ)
  • accumulate (Wikipedia)
  • compress (Wikipedia
  • )
  • insertion (FP)
  • Insert (J)

Danke für die Hilfe alle, und wenn jemand später mit einer besseren Liste kommt, werde ich sicherstellen, dass man stattdessen!

+0

APLs Reduce (/) wurde in Insert in J umbenannt (http://www.jsoftware.com/help/dictionary/d420.htm). Ein Anreiz für das Umbenennen ist, dass Insert Ergebnisse erzeugen kann, die keine Reduktion beinhalten. Einige Anmerkungen zur Geschichte dieses Operators finden sich in "Eine persönliche Ansicht von APL" (http://www.jsoftware.com/papers/APLPersonalView.htm) – kaleidic

+0

Vielen Dank! Ich werde es reinlegen –

2

Ein paar mehr:

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

Von „A tutorial on the universality and expressiveness of fold“:

Die Falte Betreiber hat seinen Ursprung in Rekursionstheorie (Kleene, 1952), während die Verwendung von Falte als zentrales Konzept in einer Programmiersprache stammt aus den Reduktion Betreiber von APL (Iverson, 1962) und später an die Insertion Betreiber von FP (Backus, 1978).

+0

Ausgezeichnet, sieht aus wie "reduce" ist wirklich der ursprüngliche Begriff. –

2

Scala nennt sie foldLeft und foldRight. Sie werden auch durch die Symbole /: und :\ dargestellt.

Es gibt Variationen von diesen, die keinen Samen nehmen. Sie sind bekannt als reduceLeft und reduceRight. Es gibt wieder Variationen von diesen reduce*, die Fehler auf eine leere Sequenz nicht werfen. Sie heißen reduceLeftOption und reduceRightOption.

Es gibt Variationen, bei denen die Bewegungsrichtung egal ist. Sie heißen fold und reduce; nimmt zuerst einen Samen, zweitens nicht.

Ich hätte dies in einen schönen Tisch legen können. Pity stackoverflow lässt das nicht zu.

0

Ein anderer

  • foldl‘(Haskell, wie foldl, arbeitet aber auf längeren Listen)

(Hoffen, dass Ihr Ironie-Detektor auf .... war)