Einführung in die Funktionale Programmierung - Informatik

Werbung
Einführung in die Funktionale Programmierung
Grundsätze: Vergleich der Paradigmen
imperative Programmierung
Programme sind Definitionen einer konkreten
Handlungsfolge.
Das Ausführen bedeutet stets Veränderungen von
Speicherzellen.
Variablen (Speicherzellen) werden Werte
zugewiesen und können überschrieben werden
(destruktive Operationen).
Schleifen für Wiederholungen
Anwendungen:
Interaktion mit Benutzer,
graphische Oberflächen
funktionale Programmierung
"Programme" sind Sammlungen von Funktionsdefinitionen,
die sich aufeinander beziehen können. Das Ausführen eines
Programms bedeutet das Auswerten eines
Funktionsausdrucks mit konkreten Argumenten.
Es gibt keine Variablen, keine Zuweisungen.
Rekursion ist das einzige Wiederholungskonstrukt
dient der Entwicklung beweisbarer Algorithmen,
als Prototyping-Werkzeug und
als Spezifikationssprache
+ kurz, kompakt
+ Korrektheit von Algorithmen ist mathematisch beweisbar
- Effizienz
Quellen: Duden Informatik S. 280 ff
Funktionsdefinitionen
•
•
•
Linke Seite:
o Funktionsname,
o einen oder mehrere Variablennamen als Argumente – durch Leerzeichen (Applikationsoperator)
getrennt oder anstelle der Variablen
o Muster.
Definierendes Gleichheitszeichen
Rechte Seite:
o ein Ausdruck oder
o ein bedingter Ausdruck mit Fallunterscheidungen (Guards). Einrückung beachten!
1. Explizite Funktionen
Die Funktionsdefinition kann sofort ausgewertet werden.
Aufgabe: Implementieren Sie die folgenden Funktionen, geben Sie den Typ an:
• ist_zweistellig: liefert True, falls die Zahl zweistellig ist,
• hoch3 berechnet die dritte Potenz einer Zahl,
• ist_Vielfaches_von_8: liefert True, falls die Zahl durch 8 teilbar ist,
• ist_Vielfaches_von: erhält zwei Zahlen a und b und liefert True, falls b durch a teilbar ist
• die logischen Funktionen und, oder, nicht für die Eingaben 0 und 1 (Musteranpassung).
2. Rekursive Funktionen (Standardfall in der funktionalen Programmierung)
Auf der rechten Seite der rekursiven Definition kommt mindestens einmal die zu definierende Funktion vor.
Prinzip:
Rekursionsanker: Abbruchbedingung für die Rekursion
Rekursionsschritt: Rechnung und Funktionsaufruf mit reduziertem Problem
Bespiel Fakultät:
Musteranpassung:
Guards:
fak1 1 = 1
fak2 x | x==1 =1
fak1 x = x*fak1 (x-1)
| otherwise = x*fak2(x-1)
Listen sind Paradebeispiele für rekursive Datenstrukturen. Listen bestehen aus einem Listenkopf, an dem mit dem
Konstruktor "cons" ein Schwanz angehängt ist, der wieder eine Liste ist.
Die Darstellung erfolgt so: x:xs, wobei x für ein Listenelement steht und xs für die Restliste, die auch leer sein kann.
Die einelementige Liste wird so dargestellt: [x], die leere Liste [].
Beispiele für Listen sind Zeichenketten und Listen von ganzen Zahlen.
Hier einige sind Aufgaben zum Üben des Umgangs mit Listen und der Musteranpassung.
Gesucht sind die Typen und die Implementierung der folgenden Funktionen:
1. Berechne die Länge einer Liste (laenge)
2. Berechne das Maximum der Elemente einer Liste (maxi).
3. Berechne die Anzahl des Auftretens eines Elements in der Liste (anzEl).
4. dupliziere liefert eine Liste, in der alle Elemente dupliziert sind.
5. loesche erhält ein Listenelement, das danach nicht mehr in der Liste enthalten ist.
J. Geschinsky
Archenhold-Oberschule
LK- Informatik
Einführung Haskell
Herunterladen