In der Mathematik und Informatik bezeichnet Currying die Technik, eine Funktion, die mehrere Argumente entgegennimmt, in eine Folge von Funktionsfamilien zu übersetzen , von denen jede ein einzelnes Argument entgegennimmt.

Im prototypischen Beispiel beginnt man mit einer Funktion, die zwei Argumente entgegennimmt, eines aus und eines aus , und Objekte in erzeugt. Die curried Form dieser Funktion behandelt das erste Argument als Parameter, um eine Familie von Funktionen zu erzeugen. Die Familie ist so angeordnet , dass es für jedes Objekt in genau eine Funktion gibt , sodass für jedes in .

In diesem Beispiel wird die Funktion selbst zu einer Funktion, die als Argumente entgegennimmt und eine Funktion zurückgibt, die jedes Element auf eine andere Menge abbildet . Die korrekte Notation hierfür ist etwas umständlich. Die Funktion gehört zur Menge der Funktionen. Gleichzeitig gehört die Funktion zur Menge der Funktionen. Somit ist etwas, das auf eine andere Menge abbildet , vom Typ . Mit dieser Notation ist eine Funktion, die Objekte aus der ersten Menge entgegennimmt und Objekte aus der zweiten Menge zurückgibt. Man schreibt also . Dies ist ein eher informelles Beispiel; präzisere Definitionen von „Objekt“ und „Funktion“ folgen weiter unten. Diese Definitionen variieren je nach Kontext und nehmen unterschiedliche Formen an, abhängig von der zugrunde liegenden Theorie.

Currying ist verwandt mit, aber nicht identisch mit partieller Anwendung . [ 1 ] [ 2 ] Das obige Beispiel kann zur Veranschaulichung der partiellen Anwendung verwendet werden; es ist ihr sehr ähnlich. Die partielle Anwendung ist die Funktion, die das Paar und als Argumente entgegennimmt und zurückgibt. Mit derselben Notation wie oben hat die partielle Anwendung die Signatur . So geschrieben, kann man sehen, dass die Anwendung adjungiert zu Currying ist.

Das Currying einer Funktion mit mehr als zwei Argumenten kann durch Induktion definiert werden.

Currying ist sowohl in praktischen als auch in theoretischen Kontexten nützlich. In funktionalen Programmiersprachen und vielen anderen ermöglicht es die automatische Verwaltung der Argumentübergabe an Funktionen und Ausnahmen . In der theoretischen Informatik erlaubt es die Untersuchung von Funktionen mit mehreren Argumenten in einfacheren theoretischen Modellen mit nur einem Argument. Der allgemeinste Anwendungsbereich des strengen Currying- und Uncurrying-Konzepts sind abgeschlossene monoidale Kategorien . Diese bilden die Grundlage für eine umfassende Verallgemeinerung der Curry-Howard-Korrespondenz von Beweisen und Programmen hin zu einer Korrespondenz mit vielen anderen Strukturen, darunter Quantenmechanik , Kobordismen und Stringtheorie . [ 3 ]

Das Konzept des Currying wurde von Gottlob Frege eingeführt [ 4 ] [ 5 ], von Moses Schönfinkel weiterentwickelt [ 6 ] [ 5 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] und von Haskell Curry weiterentwickelt [ 8 ] [ 10 ] [ 12 ] [ 13 ] .

Uncurrying ist die duale Transformation zum Currying und kann als eine Form der Defunktionalisierung betrachtet werden . Es nimmt eine Funktion , deren Rückgabewert eine andere Funktion ist , und erzeugt eine neue Funktion , die die Argumente von sowohl als auch als Parameter entgegennimmt und als Ergebnis die Anwendung von und anschließend auf diese Argumente zurückgibt. Dieser Prozess kann iterativ wiederholt werden.

Motivation

Currying ermöglicht die Arbeit mit Funktionen, die mehrere Argumente entgegennehmen, und deren Verwendung in Kontexten, in denen Funktionen nur ein Argument benötigen. Beispielsweise lassen sich manche analytische Verfahren nur auf Funktionen mit einem einzigen Argument anwenden . In der Praxis benötigen Funktionen jedoch häufig mehr Argumente. Frege zeigte, dass es genügt, Lösungen für den Fall eines einzelnen Arguments bereitzustellen, da sich eine Funktion mit mehreren Argumenten in eine Kette von Funktionen mit jeweils einem Argument transformieren lässt. Diese Transformation ist der Prozess, der heute als Currying bekannt ist. [ 14 ] Alle „gewöhnlichen“ Funktionen, die typischerweise in der mathematischen Analysis oder in der Programmierung vorkommen , können curryt werden. Es gibt jedoch Kategorien, in denen Currying nicht möglich ist; die allgemeinsten Kategorien, die Currying erlauben, sind die abgeschlossenen monoidalen Kategorien .

Einige Programmiersprachen verwenden fast immer Curry-Funktionen, um mehrere Argumente zu verarbeiten; bekannte Beispiele sind ML und Haskell , wo in beiden Fällen alle Funktionen genau ein Argument haben. Diese Eigenschaft stammt vom Lambda-Kalkül , wo Funktionen mit mehreren Argumenten üblicherweise in Curry-Form dargestellt werden.

Currying ist verwandt mit, aber nicht identisch mit partieller Anwendung . [ 1 ] [ 2 ] In der Praxis kann die Programmiertechnik der Closures verwendet werden, um partielle Anwendung und eine Art von Currying durchzuführen, indem Argumente in einer Umgebung verborgen werden, die mit der curried Funktion übertragen wird.

Geschichte

Der Name „Curry“ in „Currying“ bezieht sich auf den Logiker Haskell Curry , der das Konzept ausführlich verwendete, doch Moses Schönfinkel hatte die Idee bereits sechs Jahre vor Curry. [ 10 ] Alternativ wurde die Bezeichnung „Schönfinkelisation“ vorgeschlagen. [ 15 ] Im mathematischen Kontext lässt sich das Prinzip auf Arbeiten von Frege aus dem Jahr 1893 zurückführen . [ 4 ] [ 5 ]

Der Ursprung des Begriffs „Currying“ ist unklar. David Turner gibt an, Christopher Strachey habe ihn 1967 in seinen Vorlesungsnotizen „ Fundamental Concepts in Programming Languages “ geprägt [ 16 ]. In dieser Quelle wird das Konzept jedoch als „eine von Schönfinkel entwickelte Methode“ eingeführt, und der Begriff „Currying“ selbst wird nicht verwendet. Curry wird später im Zusammenhang mit Funktionen höherer Ordnung erwähnt [ 7 ] . John C. Reynolds definierte „Currying“ in einer Arbeit von 1972, beanspruchte aber nicht, den Begriff geprägt zu haben [ 8 ] .

Definition

Currying lässt sich am einfachsten anhand einer informellen Definition verstehen, die sich dann an verschiedene Anwendungsbereiche anpassen lässt. Zunächst müssen einige Notationen eingeführt werden. Die Notation bezeichnet alle Funktionen von nach . Ist eine solche Funktion , schreiben wir . Sei das geordnete Paar der Elemente von bzw. , also das kartesische Produkt von und . Hierbei können und Mengen, Typen oder andere Objekttypen sein, wie im Folgenden erläutert wird.

Gegeben sei eine Funktion

,

Currying erzeugt eine neue Funktion

Die

Das heißt, es nimmt ein Argument vom Typ entgegen und gibt eine Funktion vom Typ zurück . Es ist definiert durch

für vom Typ und vom Typ . Dann schreiben wir auch .

Das Entcurrying ist die umgekehrte Transformation und lässt sich am einfachsten anhand ihrer rechtsadjungierten Funktion verstehen.

Mengenlehre

In der Mengenlehre bezeichnet man mit der Notation die Menge der Funktionen von der Menge A nach der Menge B. Currying ist die natürliche Bijektion zwischen der Menge der Funktionen von A nach B und der Menge der Funktionen von A nach B. In Symbolen:

Tatsächlich ist es diese natürliche Bijektion, die die Exponentialschreibweise für die Menge der Funktionen rechtfertigt. Wie in allen Fällen des Currying beschreibt die obige Formel ein adjungiertes Funktorenpaar : Für jede feste Menge ist der Funktor linksadjungiert zum Funktor .

In der Kategorie der Mengen wird das Objekt als Exponentialobjekt bezeichnet .

Funktionsräume

In der Theorie der Funktionenräume , etwa in der Funktionalanalysis oder der Homotopietheorie , interessiert man sich üblicherweise für stetige Funktionen zwischen topologischen Räumen . Man schreibt (den Hom-Funktor ) für die Menge aller Funktionen von nach und verwendet die Notation für die Teilmenge der stetigen Funktionen. Hierbei ist die Bijektion.

Das Entcurrying ist die Umkehrabbildung. Wenn die Menge der stetigen Funktionen von nach durch die kompakt-offene Topologie gegeben ist und der Raum lokal kompakt Hausdorffsch ist , dann

ist ein Homöomorphismus . Dies ist auch der Fall, wenn , und kompakt erzeugt sind , [ 17 ] : Kapitel 5 [ 18 ], obwohl es noch weitere Fälle gibt. [ 19 ] [ 20 ]

Eine nützliche Folgerung ist, dass eine Funktion genau dann stetig ist, wenn ihre Curried-Form stetig ist. Ein weiteres wichtiges Ergebnis ist, dass die Anwendungsabbildung , in diesem Kontext üblicherweise als „Auswertung“ bezeichnet, stetig ist (beachten Sie, dass „eval“ in der Informatik ein völlig anderes Konzept ist). Das heißt:

ist stetig, wenn kompakt-offen und lokal kompakt Hausdorff ist. [ 21 ] Diese beiden Ergebnisse sind zentral für den Nachweis der Stetigkeit der Homotopie , d.h. wenn das Einheitsintervall ist , sodass man sich vorstellen kann, dass entweder eine Homotopie zweier Funktionen von nach ist oder, äquivalent dazu, ein einzelner (stetiger) Pfad in ist .

Algebraische Topologie

In der algebraischen Topologie dient Currying als Beispiel für die Eckmann-Hilton-Dualität und spielt daher in verschiedenen Kontexten eine wichtige Rolle. Beispielsweise ist der Schleifenraum adjungiert zu reduzierten Suspensionen ; dies wird üblicherweise wie folgt geschrieben:

Dabei ist die Menge der Homotopieklassen von Abbildungen , die Suspension von A und der Schleifenraum von A. Im Wesentlichen kann die Suspension als kartesisches Produkt von mit dem Einheitsintervall modulo einer Äquivalenzrelation betrachtet werden, die das Intervall in eine Schleife umwandelt. Die Curry-Form bildet dann den Raum auf den Raum der Funktionen von Schleifen nach ab , d. h. von nach . [ 21 ] Dann ist der adjungierte Funktor , der Suspensionen auf Schleifenräume abbildet, und die Entcurryung ist der Duale. [ 21 ]

Die Dualität zwischen dem Abbildungskegel und der Abbildungsfaser ( Kofibration und Fibration ) [ 17 ] : Kapitel 6,7 kann als eine Form des Currying verstanden werden, was wiederum zur Dualität der langen exakten und koexakten Puppe-Sequenzen führt .

In der homologischen Algebra wird die Beziehung zwischen Currying und Uncurrying als Tensor-Hom-Adjunktion bezeichnet . Hierbei ergibt sich eine interessante Besonderheit: Der Hom-Funktor und der Tensorproduktfunktor lassen sich möglicherweise nicht zu einer exakten Sequenz liften ; dies führt zur Definition des Ext-Funktors und des Tor-Funktors .

Domänentheorie

In der Ordnungstheorie , der Theorie der Verbände partiell geordneter Mengen , ist eine Funktion stetig, wenn dem Verband die Scott-Topologie gegeben ist . [ 22 ] Scott-stetige Funktionen wurden erstmals im Rahmen des Versuchs untersucht, eine Semantik für den Lambda-Kalkül zu entwickeln (da die gewöhnliche Mengenlehre hierfür nicht ausreicht). Allgemeiner werden Scott-stetige Funktionen heute in der Domänentheorie untersucht , die die denotationale Semantik von Computeralgorithmen umfasst. Die Scott-Topologie unterscheidet sich deutlich von vielen gängigen Topologien in der Kategorie der topologischen Räume ; sie ist typischerweise feiner und nicht nüchtern .

The notion of continuity makes its appearance in homotopy type theory, where, roughly speaking, two computer programs can be considered to be homotopic, i.e. compute the same results, if they can be "continuously" refactored from one to the other.

Lambda calculi

In theoretical computer science, currying provides a way to study functions with multiple arguments in very simple theoretical models, such as the lambda calculus, in which functions only take a single argument. Consider a function taking two arguments, and having the type , which should be understood to mean that x must have the type , y must have the type , and the function itself returns the type . The curried form of f is defined as

where is the abstractor of lambda calculus. Since curry takes, as input, functions with the type , one concludes that the type of curry itself is

The → operator is often considered right-associative, so the curried function type is often written as . Conversely, function application is considered to be left-associative, so that is equivalent to

.

That is, the parenthesis are not required to disambiguate the order of the application.

Curried functions may be used in any programming language that supports closures; however, uncurried functions are generally preferred for efficiency reasons, since the overhead of partial application and closure creation can then be avoided for most function calls.

Type theory

In type theory, the general idea of a type system in computer science is formalized into a specific algebra of types. For example, when writing , the intent is that and are types, while the arrow is a type constructor, specifically, the function type or arrow type. Similarly, the Cartesian product of types is constructed by the product type constructor .

The type-theoretical approach is expressed in programming languages such as ML and the languages derived from and inspired by it: Caml, Haskell, and F#.

Der typentheoretische Ansatz ergänzt die Sprache der Kategorientheorie auf natürliche Weise , wie weiter unten erläutert wird. Kategorien, insbesondere monoidale Kategorien , besitzen eine interne Sprache , deren prominentestes Beispiel der einfach getypte Lambda-Kalkül ist. Dies ist in diesem Zusammenhang wichtig, da sie sich aus einem einzigen Typkonstruktor, dem Pfeiltyp, aufbauen lässt. Durch Currying erhält die Sprache dann einen natürlichen Produkttyp. Die Korrespondenz zwischen Objekten in Kategorien und Typen ermöglicht es, Programmiersprachen als Logiken (mittels Curry-Howard-Korrespondenz ) und als andere Arten mathematischer Systeme zu interpretieren , wie weiter unten erläutert wird.

Logik

Gemäß der Curry-Howard-Korrespondenz ist die Existenz von Currying und Uncurrying äquivalent zum logischen Theorem (auch bekannt als Exportation ), da Tupel ( Produkttyp ) der Konjunktion in der Logik entsprechen und der Funktionstyp der Implikation entspricht.

Das Exponentialobjekt in der Kategorie der Heyting-Algebren wird üblicherweise als materielle Implikation geschrieben . Distributive Heyting-Algebren sind Boolesche Algebren , und das Exponentialobjekt hat die explizite Form , wodurch deutlich wird, dass das Exponentialobjekt tatsächlich eine materielle Implikation ist . [ 23 ]

Kategorientheorie

Die oben genannten Begriffe des Currying und Uncurrying finden ihre allgemeinste, abstrakteste Formulierung in der Kategorientheorie . Currying ist eine universelle Eigenschaft eines Exponentialobjekts und führt zu einer Adjunktion in kartesisch abgeschlossenen Kategorien . Das heißt, es existiert ein natürlicher Isomorphismus zwischen den Morphismen von einem binären Produkt und den Morphismen zu einem Exponentialobjekt .

Dies lässt sich zu einem allgemeineren Ergebnis in geschlossenen monoidalen Kategorien verallgemeinern : Currying ist die Aussage, dass das Tensorprodukt und der interne Hom adjungierte Funktoren sind ; das heißt, zu jedem Objekt gibt es einen natürlichen Isomorphismus :

Hier bezeichnet Hom den (externen) Hom-Funktor aller Morphismen in der Kategorie, während den internen Hom-Funktor in der abgeschlossenen monoidalen Kategorie bezeichnet. In der Kategorie der Mengen sind beide identisch. Ist das Produkt das kartesische Produkt, so entspricht der interne Hom-Funktor dem Exponentialobjekt .

Currying kann auf zwei Arten fehlschlagen. Zum einen, wenn eine Kategorie nicht abgeschlossen ist und daher keinen internen Hom-Funktor besitzt (möglicherweise, weil es mehrere Möglichkeiten für einen solchen Funktor gibt). Zum anderen, wenn sie nicht monoidal ist und daher kein Produkt besitzt (d. h. keine Möglichkeit, Paare von Objekten darzustellen). Kategorien, die sowohl Produkte als auch interne Hom-Funktoren besitzen, sind genau die abgeschlossenen monoidalen Kategorien.

Die Betrachtung kartesisch abgeschlossener Kategorien genügt für die Diskussion der klassischen Logik ; die allgemeinere Betrachtung abgeschlossener monoidaler Kategorien eignet sich für die Quantenberechnung . [ 24 ]

Der Unterschied zwischen diesen beiden besteht darin, dass das Produkt für kartesische Kategorien (wie die Kategorie der Mengen , vollständige partielle Ordnungen oder Heyting-Algebren ) einfach das kartesische Produkt ist ; es wird als geordnetes Paar von Elementen (oder als Liste) interpretiert. Der einfach getypte Lambda-Kalkül ist die interne Sprache kartesisch abgeschlossener Kategorien; und aus diesem Grund sind Paare und Listen die primären Typen in der Typentheorie von LISP , Scheme und vielen funktionalen Programmiersprachen .

Im Gegensatz dazu ist das Produkt für monoidale Kategorien (wie Hilberträume und Vektorräume der Funktionalanalysis ) das Tensorprodukt . Die interne Sprache solcher Kategorien ist die lineare Logik , eine Form der Quantenlogik ; das zugehörige Typsystem ist das lineare Typsystem . Solche Kategorien eignen sich zur Beschreibung verschränkter Quantenzustände und ermöglichen allgemein eine umfassende Verallgemeinerung der Curry-Howard-Korrespondenz auf die Quantenmechanik , auf Kobordismen in der algebraischen Topologie und auf die Stringtheorie . [ 3 ] Das lineare Typsystem und die lineare Logik sind nützlich zur Beschreibung von Synchronisationsprimitiven , wie z. B. wechselseitigen Ausschlussmechanismen und der Funktionsweise von Verkaufsautomaten.

Gegensatz zur Anwendung einer Teilfunktion

Currying und partielle Funktionsanwendung werden oft verwechselt. [ 1 ] [ 2 ] Ein wesentlicher Unterschied zwischen den beiden besteht darin, dass ein Aufruf einer partiell angewendeten Funktion das Ergebnis sofort zurückgibt und nicht eine weitere Funktion in der Currying-Kette; dieser Unterschied lässt sich besonders gut bei Funktionen mit mehr als zwei Stelligkeiten veranschaulichen. [ 25 ]

Bei einer Funktion vom Typ `f` erzeugt Currying das Ergebnis `f` . Das heißt, während die Auswertung der ersten Funktion als `f` dargestellt werden könnte , würde die Auswertung der gecurryten Funktion als `f` dargestellt , wobei jedes Argument nacheinander auf eine Funktion mit einem Argument angewendet wird, die vom vorherigen Aufruf zurückgegeben wurde. Beachten Sie, dass wir nach dem Aufruf von `f` eine Funktion erhalten, die ein einzelnes Argument entgegennimmt und eine andere Funktion zurückgibt, nicht eine Funktion, die zwei Argumente entgegennimmt.

Im Gegensatz dazu bezeichnet die partielle Funktionsanwendung das Festlegen einer bestimmten Anzahl von Argumenten einer Funktion, wodurch eine Funktion mit geringerer Stelligkeit entsteht. Gemäß der obigen Definition könnten wir das erste Argument festlegen (oder „binden“) und so eine Funktion vom Typ erhalten . Die Auswertung dieser Funktion ließe sich wie folgt darstellen : . Beachten Sie, dass das Ergebnis der partiellen Funktionsanwendung in diesem Fall eine Funktion mit zwei Argumenten ist.

Intuitiv bedeutet partielle Funktionsanwendung: „Wenn man das erste Argument der Funktion festlegt, erhält man eine Funktion der verbleibenden Argumente.“ Wenn beispielsweise die Funktion div für die Division x / y steht , dann ist div mit dem Parameter x auf 1 festgelegt (d. h. div 1) eine andere Funktion: dieselbe wie die Funktion inv , die das multiplikative Inverse ihres Arguments zurückgibt, definiert durch inv ( y ) = 1/ y .

Die praktische Motivation für die partielle Anwendung liegt darin, dass die Funktionen, die durch Übergabe einiger, aber nicht aller Argumente einer Funktion entstehen, oft nützlich sind; beispielsweise verfügen viele Programmiersprachen über eine Funktion oder einen Operator, der dem Additionsoperator ähnelt plus_one. Die partielle Anwendung vereinfacht die Definition solcher Funktionen, etwa durch die Erstellung einer Funktion, die den Additionsoperator mit der Grenze 1 als erstem Argument repräsentiert.

Eine partielle Anwendung kann als Auswertung einer curried Funktion an einem Fixpunkt betrachtet werden, z. B. gegeben und dann oder einfach wo der erste Parameter von f curried wird.

Somit reduziert sich die partielle Anwendung auf eine Curry-Funktion an einem Fixpunkt. Weiterhin ist eine Curry-Funktion an einem Fixpunkt (trivialerweise) eine partielle Anwendung. Ein weiterer Beweis dafür ist, dass zu jeder Funktion eine Funktion definiert werden kann, sodass . Somit lässt sich jede partielle Anwendung auf eine einzelne Curry-Operation reduzieren. Daher ist Curry treffender als eine Operation zu definieren, die in vielen theoretischen Fällen rekursiv angewendet wird, aber theoretisch (als Operation betrachtet) nicht von einer partiellen Anwendung zu unterscheiden ist.

Eine partielle Anwendung kann also als das objektive Ergebnis einer einzelnen Anwendung des Curry-Operators auf eine bestimmte Reihenfolge der Eingaben einer Funktion definiert werden.

Siehe auch

Referenzen

  1. ^ a b c cdiggins (24. Mai 2007). „Currying != Verallgemeinerte partielle Anwendung?!" . Lambda the Ultimate: Der Programmiersprachen-Weblog .
  2. ^ a b c „Partielle Funktionsanwendung ist kein Currying“ . The Uncarved Block . 7. August 2020. Archiviert vom Original am 23. Oktober 2016.
  3. ^ a b Baez, John C.; Stay, Mike (6. Juni 2009). „Physik, Topologie, Logik und Berechnung: Ein Rosetta-Stein“. In: Coecke, Bob (Hrsg.). Neue Strukturen für die Physik (PDF) . Lecture Notes in Physics. Band 813: Neue Strukturen für die Physik. Berlin, Heidelberg: Springer (veröffentlicht am 5. Juli 2010). S.  95–172 . arXiv : 0903.0340 . doi : 10.1007/978-3-642-12821-9_2 . ISBN 978-3-642-12821-9S2CID 115169297.  Archiviert vom Original (PDF) am 5. Dezember 2022.
  4. ^ a b Frege, Gottlob (1893). „§ 36“ . Grundgesetze der Arithmetik (auf Deutsch). Buch aus den Sammlungen der University of Wisconsin – Madison, digitalisiert von Google am 26. August 2008. Jena: Hermann Pohle. S.  54–55 .
  5. ^ a b c Quine, WV (1967). „Einleitung zu Moses Schönfinkels 1924 erschienenem Werk „Über die Bausteine ​​der mathematischen Logik““". In: van Heijenoort, Jean (Hrsg.). Von Frege zu Gödel: Ein Quellenbuch zur mathematischen Logik, 1879–1931 . Harvard University Press. S.  355–357 . ISBN 9780674324497Die
  6. ^ Schönfinkel, Moses (September 1924) [Präsentiert in der Mathematischen Gesellschaft in Göttingen am 7. Dezember 1920. Eingegangen bei Mathematische Annalen am 15. März 1924.]. „Über die Bausteine ​​der mathematischen Logik “ (PDF) . Mathematische Annalen . 92 ( 3– 4). Berlin: Springer: 305–316 . doi : 10.1007/BF01448013 . S2CID 118507515 . 
  7. ^ a b Strachey, Christopher (April 2000) [Dieser Artikel bildet die Grundlage einer Vorlesungsreihe, die im August 1967 an der Internationalen Sommerschule für Computerprogrammierung in Kopenhagen gehalten wurde.]. „ Grundlegende Konzepte in Programmiersprachen“ . Higher-Order and Symbolic Computation . 13 : 11–49 . CiteSeerX 10.1.1.332.3161 . doi : 10.1023/A:1010000313106 . ISSN 1573-0557 . S2CID 14124601. Es gibt ein von Schönfinkel entwickeltes Verfahren, um Operatoren mit mehreren Operanden auf die sukzessive Anwendung von Operatoren mit einem Operanden zu reduzieren.   
  8. ^ a b c Ursprünglich veröffentlicht als Reynolds, John C. (1. August 1972). „Definitional interpreters for higher-order programming languages“ . In: Shields, Rosemary (Hrsg.). Proceedings of the ACM annual conference - ACM '72 . Band 2. ACM Press. S.  717–740 . doi : 10.1145/800194.805852 . ISBN 9781450374927S2CID 163294. In der letzten Zeile haben wir einen Trick namens Currying (nach dem Logiker H. Curry) angewendet ,  um das Problem der Einführung einer binären Operation in eine Sprache zu lösen, in der alle Funktionen ein einzelnes Argument akzeptieren müssen. (Der Gutachter merkt an, dass „Currying“ zwar eleganter klingt, „Schönfinkeling“ aber möglicherweise genauer wäre.) Neuveröffentlicht als Reynolds, John C. (1998). „Definitional Interpreters for Higher-Order Programming Languages“ . Higher-Order and Symbolic Computation . 11 (4). Boston: Kluwer Academic Publishers: 363–397 . doi : 10.1023/A:1010027404223 . 13 – via Syracuse University: College of Engineering and Computer Science – Former Departments, Centers, Institutes and Projects.
  9. ^ Slonneger, Kenneth; Kurtz, Barry L. (1995). „Curried Functions, 5.1: Concepts and Examples, Chapter 5: The Lambda Calculus“. Formal Syntax and Semantics of Programming Languages: A Laboratory Based Approach (PDF) . Addison-Wesley Publishing Company. S. 144. ISBN 0-201-65697-3Die
  10. ^ a b c Curry, Haskell B. (1980). Barwise, Jon; Keisler, H. Jerome; Kunen, Kenneth (Hrsg.). „Einige philosophische Aspekte der Kombinatorischen Logik“. Das Kleene-Symposium: Tagungsband des Symposiums vom 18. bis 24. Juni 1978 in Madison, Wisconsin, USA (Studien zur Logik und den Grundlagen der Mathematik) . Studien zur Logik und den Grundlagen der Mathematik. 101. North-Holland Publishing Company, ein Imprint von Elsevier: 85–101 . doi : 10.1016/S0049-237X(08)71254-0 . ISBN 9780444853455ISSN  0049-237X . S2CID  117179133 . Einige zeitgenössische Logiker nennen diese Betrachtungsweise einer Funktion „Currying“, weil ich sie ausgiebig genutzt habe; Schönfinkel hatte die Idee jedoch schon etwa 6 Jahre vor mir .
  11. ^ "Currying Schonfinkelling" . Portland Pattern Repository Wiki . Cunningham & Cunningham, Inc. 6. Mai 2012.
  12. ^ Barendregt, Henk; Barendsen, Erik (März 2000) [Dezember 1998]. Einführung in die Lambda-Kalküle (PDF) (überarbeitete Ausgabe). P. 8.
  13. ^ Curry, Haskell ; Feys, Robert (1958). Kombinatorische Logik . Band I (2. Aufl.). Amsterdam, Niederlande: North-Holland Publishing Company.
  14. ^ Hutton, Graham; Jones, Mark P., Hrsg. (November 2002). „Häufig gestellte Fragen zu comp.lang.functional, 3. Technische Themen, 3.2. Currying“ . University of Nottingham Computer Science .
  15. ^ Heim, Irene; Kratzer, Angelika (2. Januar 1998). Semantik in der generativen Grammatik (PDF) . Malden, Massachusetts: Blackwell Publishers, ein Imprint von Wiley. ISBN 0-631-19712-5Die
  16. ^ Turner, David (1. Juni 1997). „Programmiersprache, Currying oder Schonfinkeling?, Nr. 9/14“ . Computer Programming Language Forum . Archiviert vom Original am 3. März 2022. Abgerufen am 3. März 2022 .
  17. ^ a b May, Jon Peter (1999). Ein kurzer Kurs in algebraischer Topologie (PDF) . Chicago Lectures in Mathematics. Chicago, Ill.: University of Chicago Press. S.  39–55 . ISBN 0-226-51183-9OCLC  41266205 .​
  18. ^ "kompakt erzeugter topologischer Raum" . nLab . 28. Mai 2023.
  19. Tillotson , J.; Booth, Peter I. (März 1980) [Eingegangen am 2. Oktober 1978, überarbeitet am 29. Juni 1979, veröffentlicht am 1. Mai 1980]. Verfasst an der Memorial University of Newfoundland. „Monoidal closed, Cartesian closed and convenience categories of topological spaces“ (PDF) . Pacific Journal of Mathematics . 88 (1). Berkeley, Kalifornien: Mathematical Sciences Publishers: 35–53 . doi : 10.2140/pjm.1980.88.35 . eISSN 1945-5844 . ISSN 0030-8730 .  
  20. ^ "praktische Kategorie topologischer Räume" . nLab . 11. August 2023.
  21. ^ a b c Rotman, Joseph Jonah (1988). „Kapitel 11“. Einführung in die algebraische Topologie . Graduate Texte in Mathematics; 119. New York: Springer-Verlag. ISBN 978-0-387-96678-6OCLC  17383909 .​
  22. ^ Barendregt, Hendrik Pieter (1984). „Theoreme 1.2.13, 1.2.14“. Der Lambda-Kalkül: Syntax und Semantik . Studien zur Logik und den Grundlagen der Mathematik. Band 103 (überarb. Ausg.). North-Holland, ein Imprint von Elsevier. ISBN 978-0-444-87508-2Die
  23. ^ Mac Lane, Saunders ; Moerdijk, Ieke (1992). „Kapitel I. Kategorien von Funktoren; Abschnitte 7. Aussagenlogik, 8. Heyting-Algebren und 9. Quantoren als Adjungierte“ . Garben in Geometrie und Logik: Eine erste Einführung in die Topostheorie . New York: Springer-Verlag, Teil von Springer Science & Business Media. S.  48–57 . ISBN 978-0-387-97710-2Die
  24. ^ Abramsky, Samson; Coecke, Bob (5. März 2007). „Eine kategorische Semantik von Quantenprotokollen“. Logic in Computer Science (LICS 2004): Proceedings, 19. jährliches IEEE-Symposium, Turku, Finnland, 2004. IEEE Computer Society Press. S.  415–425 . arXiv : quant-ph/0402130 . doi : 10.1109/LICS.2004.1319636 . ISBN 978-0-7695-2192-3Die
  25. ^ Lee, G. Kay (15. Mai 2013). „Funktionale Programmierung in 5 Minuten“ . Folien .