ScholarGate
Assistent

Funktionale Programmierung

Funktionale Programmierung behandelt Berechnungen als die Auswertung mathematischer Funktionen, vermeidet veränderlichen Zustand und betont Funktionen höherer Ordnung, Unveränderlichkeit und gleichungsbasierte Argumentation.

Thema finden mit PaperMindDemnächstFind papers & topics
Tools & resources
Folien herunterladen
Learn & explore
VideoDemnächst

Definition

Funktionale Programmierung ist ein Paradigma, bei dem Programme durch die Komposition reiner Funktionen über unveränderliche Daten erstellt werden, sodass die Auswertung eines Ausdrucks nur von seinen Eingaben abhängt und keine beobachtbaren Nebenwirkungen erzeugt.

Scope

Dieses Thema behandelt das funktionale Paradigma, das im Lambda-Kalkül begründet ist: Funktionen erster Klasse und höherer Ordnung, Unveränderlichkeit und referenzielle Transparenz, Rekursion, verzögerte Auswertung (Lazy Evaluation), algebraische Datentypen und Musterabgleich sowie die Verwendung von Monaden und anderen Abstraktionen zur Strukturierung von Effekten. Es wird erläutert, warum reine Funktionen die Komposition, Argumentation und Parallelisierung unterstützen.

Core questions

  • Wie verbessern Funktionen höherer Ordnung und verzögerte Auswertung die Modularität?
  • Welchen Nutzen bietet referenzielle Transparenz hinsichtlich Argumentation und Optimierung?
  • Wie werden Nebenwirkungen in einem rein funktionalen Kontext modelliert?
  • Wie verhält sich funktionaler Code zum Lambda-Kalkül und zur Typentheorie?

Key theories

Verbindung durch Funktionen höherer Ordnung und Laziness
Hughes argumentiert, dass der Modularitätsvorteil der funktionalen Programmierung von Funktionen höherer Ordnung und verzögerter Auswertung herrührt, die als „Klebstoff“ für die Komposition kleiner, wiederverwendbarer Programmteile dienen.
Monaden zur Strukturierung von Effekten
Wadler zeigte, wie Monaden eine einheitliche, kompositionelle Methode bieten, um Zustand, Ausnahmen und andere Effekte durch ansonsten reine funktionale Programme zu führen.
Algebra funktionaler Programme
Backus' funktionsorientierte Programmierung präsentiert eine Algebra von Kombinatoren mit Gleichungsgesetzen, die das Argumentieren über und das Transformieren von Programmen unterstützen.

Clinical relevance

Funktionale Techniken wie Unveränderlichkeit und reine Funktionen reduzieren Fehlerklassen, die mit gemeinsam genutztem, veränderlichem Zustand verbunden sind, und erleichtern das Testen und Parallelisieren von Code. Diese Konzepte haben sich durch Lambdas, unveränderliche Sammlungen und Stream-/Map-Reduce-Abstraktionen weit in Mainstream-Sprachen verbreitet.

History

Die funktionale Programmierung geht auf Churchs Lambda-Kalkül und McCarthys Lisp (1958) zurück. In den 1970er und 1980er Jahren entstanden ML, Miranda und Scheme; Backus' Turing-Vorlesung von 1977 förderte die funktionale Kritik am imperativen Stil. Haskell standardisierte um 1990 die verzögerte, rein funktionale Programmierung, und Wadlers Monaden-basierte Effektbehandlung machte die rein funktionale Programmierung für reale Aufgaben praktikabel.

Debates

Verzögerte versus strikte Auswertung
Entwickler funktionaler Sprachen diskutieren, ob die verzögerte Auswertung (Call-by-Need), die elegante unendliche Strukturen und Modularität ermöglicht, ihre Kosten bei der Argumentation über Speicherplatz und Leistung im Vergleich zur strikten Auswertung wert ist.

Key figures

  • John Hughes
  • Philip Wadler
  • John Backus
  • Richard Bird
  • Simon Peyton Jones

Related topics

Seminal works

  • hughes1989
  • wadler1992
  • backus1978
  • bird1998

Frequently asked questions

Was ist referenzielle Transparenz?
Ein Ausdruck ist referenziell transparent, wenn er durch seinen Wert ersetzt werden kann, ohne das Verhalten des Programms zu ändern, was zutrifft, wenn Funktionen rein und Daten unveränderlich sind.
Wie geht funktionale Programmierung mit Ein-/Ausgabe und Zustand um?
Effekte werden typischerweise explizit modelliert, zum Beispiel durch Monaden oder Effektsysteme, sodass die Reihenfolge und das Vorhandensein von Nebenwirkungen in Typen erfasst werden, anstatt implizit durch Mutation zu entstehen.

Methods for this concept

Related concepts