Imperative vs. Funktionale Programmierung

Werbung
Technische Universität München
Imperative vs. Funktionale Programmierung
• Beispiel:
Entwerfe eine Funktion, die testet, ob eine Zahl n eine Primzahl ist
oder nicht.
• Beobachtung:
(1)
Wenn n Primzahl ist, ist die Menge der Teiler von n leer.
(2)
Die Menge der Teiler von n sind alle Zahlen x zwischen
2 … n-1, die n ohne Rest teilen
Fakultät für Informatik, Einführung in die Informatik, WS 2010/11
Technische Universität München
Imperative vs. Funktionale Programmierung
Imperatives Programm zur Berechnung, ob eine gegebene Zahl eine
Primzahl ist
function isPrime (n : ganzzahl) : wahrheitswert;
variables
m : ganzzahl;
found : wahrheitswert;
begin
m := 2;
found := false;
while (m <= n-1) and (not found) do
if (n mod m) = 0 then found := true;
else m := m + 1;
isPrime := not found;
end
Fakultät für Informatik, Einführung in die Informatik, WS 2010/11
Technische Universität München
Imperative vs. Funktionale Programmierung
• Das imperative Programm (lat. imperare = befehlen) besteht aus
einer Folge von Befehlen (Statements) an die Maschine; es
beschreibt, wie der Algorithmus abläuft
• Das imperative Programm kontrolliert die Abarbeitung durch
explizite Schleifenanweisungen (while, for),
bedingte Anweisungen (if then else),
Sequenzierung (`;') von Anweisungen.
– Die Anweisungsfolge ist explizit festgelegt.
– Die Berechnung erfolgt als Seiteneffekt auf den Zustandsvariablen
– Zustandsvariablen dienen gleichzeitig zur Kontrolle der Maschine und zur
Protokollierung des Ergebnisses
Fakultät für Informatik, Einführung in die Informatik, WS 2010/11
Technische Universität München
Imperative vs. Funktionale Programmierung
• Der imperative Programmierer hat seine Anweisungen explizit
aufzureihen und muss den Ablauf des Programms direkt kodieren
(über Kontrollstrukturen)
• Der Zustand eines Algorithmus muss durch Variablenzuweisung
bzw. -auslesen explizit kontrolliert werden
• Direkte Abstraktion des
von Neumann´schen
Maschinenmodells
Fakultät für Informatik, Einführung in die Informatik, WS 2010/11
Technische Universität München
Imperative vs. Funktionale Programmierung
• Imperative Programmiersprachen bieten noch weitergehenden
direkten Zugriff auf die Maschine:
– Felder und Indexzugriffe (A[i]) (abstrahiert den linearen Speicher der Maschine
sowie indizierende Adressierungsmodi)
– Pointer und Dereferenzierung (indirekte Adressierungsmodi)
– Explizite (De-)Allokation von Speicher (der Speicher wird eigenverantwortlich
als Ressource verwaltet)
– Sprunganweisungen (goto) (direkte Manipulation des PC)
Fakultät für Informatik, Einführung in die Informatik, WS 2010/11
Technische Universität München
Imperative vs. Funktionale Programmierung
• Funktionale Programmiersprachen gehören zu den deklarativen
(lat. declarare = erklären) Programmiersprachen
• Sie beschreiben was getan werden muss, durch eine Folge von
Ausdrücken (Expressions)
-- Ist n eine Primzahl?
isPrime :: Integer -> Bool
isPrime n = (factors n == [])
where
factors n = [ x | x <- [2..n-1], n `mod` x == 0 ]
Fakultät für Informatik, Einführung in die Informatik, WS 2010/11
-- (1)
-- (2)
Technische Universität München
Imperative vs. Funktionale Programmierung
• Funktionale Programmiersprachen sind vollständig auf dem
mathematischen Funktionsbegriff aufgebaut.
• Programme einer funktionalen Programmiersprache bestehen
ausschließlich aus Funktionsdefinitionen, Funktionsaufrufen
(Applikation) und Funktionskomposition (𝑔°𝑓, g wird auf das
Ergebnis von f angewendet.
• Programme berechnen ihre Ergebnisse allein durch die Ersetzung
von Funktionsaufrufen durch Funktionsergebnisse.
– Berechnungen geschehen allein durch Auswertung von Funktionen, nicht durch
Manipulation des Maschinenzustandes bzw. –speichers
– FPLs sind zustandslos und bieten daher keine änderbaren Variablen
Fakultät für Informatik, Einführung in die Informatik, WS 2010/11
Technische Universität München
Imperative vs. Funktionale Programmierung
• Beispiel für ein funktionales Programm zur Berechnung der
Fakultätsfunktion
fak :: ganzzahl -> ganzzahl
fak 0 = 1
fak n = n * fak (n-1)
Fakultät für Informatik, Einführung in die Informatik, WS 2010/11
Herunterladen