Currying: Umwandlung von Mehrargumentfunktionen in Ein-Argument-Funktionen
Currying ist eine Technik aus Mathematik und Informatik, bei der eine Funktion mit mehreren Parametern in eine Folge von Funktionen mit jeweils einem Parameter umgewandelt wird. Konzept, Geschichte und Anwendungen.
Überblick
Currying bezeichnet die systematische Umformung einer Funktion, die mehrere Argumente erwartet, in eine Kette von Funktionen, die jeweils genau ein Argument aufnehmen. Eine Funktion f(x,y) wird so zu g(x)(y). Diese Idee spielt eine Rolle in Mathematik und Informatik und ist nach dem Logiker Haskell B. Curry benannt, obwohl die historischen Wurzeln weiter zurückreichen.
Begriffliche Eigenschaften
Formal ist Currying eine bijektive Umformung des Typs: eine Funktion von (A×B)→C entspricht einer Funktion A→(B→C). In der Lambda-Kalkulation lässt sich Currying als syntaktische Technik ausdrücken; entsprechende Prinzipien finden sich in der Theorie der Typen und in der Funktionalprogrammierung. Eine charakteristische Eigenschaft ist, dass curry(f) eine Folge von einstelligen Funktionen liefert, die schrittweise angewandt werden können.
Abgrenzung und verwandte Konzepte
Currying wird oft mit partieller Anwendung verwechselt. Beim Currying wird die Struktur der Funktion transformiert; partielle Anwendung fixiert einzelne Argumente einer gegebenen Funktion. Das Umkehren nennt man Uncurrying. Für Hintergrund zur formalen Herkunft siehe Schönfinkel und Frege und zur symbolischen Darstellung Lambda-Kalkül.
Praxisbeispiele und Nutzen
In Programmiersprachen, die Funktionen als erste Klasse behandeln, vereinfacht Currying das Kombinieren und Wiederverwenden von Funktionen. In Haskell oder ML, die häufig standardmäßig kurrierte Funktionen verwenden, kann man etwa eine Additionsfunktion add :: Int -> Int -> Int als Funktion verstehen, die erst ein Int nimmt und dann ein weiteres liefert. Currying erleichtert die Punkt-freie Programmierung, das Erzeugen von spezialisierten Funktionen und das Komponieren von Operationen.
Historische Hinweise und Entwicklung
Die Begriffe gehen auf Arbeiten von Gottlob Frege und Moses Schönfinkel zurück; Haskell Curry trug später zur Formalisierung und Verbreitung bei, sodass sein Name am Konzept haftete. Moderne Programmiersprachen und Typentheorien nutzen Currying als grundlegende Transformation.
Wichtige praktische Hinweise
- Currying ändert die Aufrufkonvention: statt f(a,b) nutzt man curry(f)(a)(b).
- Performance: Implementierungen können Unterschiede in Effizienz und Speicherverbrauch zeigen.
- In vielen Sprachen kann man Currying simulieren oder explizit bereitstellen; Informationen zu konkreten Sprachbeispielen finden sich bei Programmiersprachen und allgemeinen Erklärungen zu Funktionsumwandlungen unter Funktionstransformation.
Weitere Vertiefungen und mathematische Details sind in Lehrbüchern zur Lambda-Kalkulation und zur funktionalen Programmierung zu finden; zusätzliche Ressourcen: Mathematik, Informatik, Currying-Praxis, historische Quellen, theoretische Grundlagen, Sprachbeispiele.
Fragen und Antworten
F: Was ist Curry?
A: Currying ist eine in der Mathematik und Informatik verwendete Technik, bei der eine Funktion, die mehrere Argumente benötigt, in eine Reihe von Funktionen umgewandelt wird, die jeweils ein Argument benötigen.
F: Wer hat den Grundstein für Currying gelegt?
A: Die Mathematiker Moses Schönfinkel und Gottlob Frege legten den Grundstein für die Currying-Technik.
F: Wer ist Haskell Brooks Curry und was hat er mit Currying zu tun?
A: Haskell Brooks Curry ist ein Mathematiker, nach dem die Currying-Technik benannt ist.
F: Was ist Lambda-Kalkül?
A: Das Lambda-Kalkül ist ein formales System in der mathematischen Logik und Informatik, das zur Beschreibung von Berechnungen verwendet wird.
F: Welche Rolle spielt das Currying im Lambda-Kalkül?
A: Currying wird im Lambda-Kalkül verwendet, um Funktionen mit mehreren Argumenten auf eine Reihe von Funktionen mit nur einem Argument zu reduzieren.
F: Gibt es Programmiersprachen, die Funktionen auf ein einziges Argument beschränken?
A: Ja, einige Programmiersprachen wie ML und Haskell haben die Einschränkung, dass Funktionen nur ein Argument haben können.
F: Warum beschränken Programmiersprachen wie ML und Haskell die Anzahl der Argumente, die Funktionen haben können?
A: Der Grund für diese Einschränkung ist die Einfachheit und Flexibilität, die mit Curry einhergeht. Wenn Funktionen nur ein Argument haben, können sie leicht zusammengesetzt und kombiniert werden, was zu prägnanterem und wiederverwendbarem Code führt.
Verwandte Artikel
Autor
AlegsaOnline.com Currying: Umwandlung von Mehrargumentfunktionen in Ein-Argument-Funktionen Leandro Alegsa
URL: https://de.alegsaonline.com/art/24730
Quellen
- doi.org : 10.1023/A:1010000313106
- doi.org : 10.1023/A:1010027404223