home Funktionale Programmierung: Haskell Charakteristika Prof. Dr. Uwe Schmidt FH Wedel

Haskell Charakteristika

weiter

weiter

Syntax

Bestandteile
eines Haskell-Programms
Definitionen von Konstanten und Funktionen
Beispiel
Quicksort

weiter

Rein funktional

Definition
Jeder Bezeichner steht an jedem angewandten Vorkommen für den gleichen Wert.
Konsequenzen
Keine Zuweisungen, keine Schleifen
Programme können wie mathematische Formeln manipuliert weden
Gleiches kann überall durch gleiches ersetzt werden
Math. Gesetze können zum Argumentieren, zum Optimieren, zur Wiederverwendung und zum automatischen Testen genutzt werden.
Beispiel
Konkatenation auf Listen
Keine Zeiger, referenzielle Transparenz
Funktionen mit I/O müssen anders behandelt werden als reine Funktionen
I/O
getChar: Funktion ohne Parameter?
Lösung
Monaden
Idee
Der Rest der Welt wird als eine Variable aufgefasst.
Diese wird bei I/O-behafteten Berechnungen durch die Funktionen durchgefädelt
Ansatz
do-Notation
für I/O-behaftete Berechnungen
2.Beispiel
getLine
main
Transformation des Weltzustands

weiter

Statische Typisierung

Typen
von Ausdrücken werden vollständig zur Übersetzungszeit ausgewertet
Konsequenzen
Keine cast-exceptions
Es wird statisch bewiesen, dass gewisse Fehlerklassen nicht vorhanden sind
Dynamisches Binden muss explizit gemacht werden
Ausdrucksstarkes Typsystem
Parametrische Polymorphie
Generics
Beispiel
length
ad-hoc-Polymorphie
Typklassen
Beispiel
Gleichheitstest (vordefinierte Klasse)
Typklassen über Typkonstruktoren: Funktor, Monade, Arrow, ...
Konsequenzen
Viele Eigenschaften können mit dem Typsystem beschrieben werden und deren Einhaltung so statisch garantiert werden

weiter

Bedarfsauswertung

Definition
Ein Ausdruck wird erst dann ausgewertet, wenn sein Wert benötigt wird.
?
call by name
?
call by need (lazy evaluation)
Beispiel
infinity
Nutzen?
Allgemeiner als call by value
Unendliche Strukturen (Listen, Bäume, Datenströme, ...)
 
l :: [Int]
l = [0,1,2,3,...]
Modularität, Wiederverwendung (Trainingslager Listen)
Gefahr?
Performanz, Speicherlecks

weiter

Funktionen als Daten

Funktionen
sind first class citizens
Parameter
Funktionsresultat
Komponente in strukturierten Daten
Beispiel
Funktionen als Implementierung für Container

weiter

Punktfreier Programmierstil

Kombinatoren
Operatoren zur Verknüpfung von Funktionen
Extensionalitätzprinzip
zwei Funktionen sind gleich, wenn sie für alle Argumente das gleiche Resultat liefern
Komposition
von Funktionen
Beispiel
Identität
vordefiniert
konstante Funktion
vordefiniert
Vertauschen der Parameter
vordefiniert
Funktionsanwendung
vordefiniert
merke
Weitere Kombinatoren werden folgen

weiter

Currying

Definition
Alle Funktionen werden auf einstellige Funktionen zurückgeführt
Beispiel
Kombinatoren
für Currying
Nutzen
Parameter können zu unterschiedlichen Zeitpunkten übergeben werden
Kombinierbarkeit der Funktionen wird verbessert

weiter

Algebraische Datentypen

Selbstdefinierte Datentypen
auch generisch
Listen
von Zahlen
Listen
generisch, vordefiniert mit eigener Listensyntax
Bäume
zweistellig, mit Information an den inneren Knoten
Bäume
zweistellig, mit Information an den Blättern
Bäume
zweistellig, mit Information an den inneren Knoten und den Blättern
Option
vordefiniert
Summe
vordefiniert
Produkt
in Tupelschreibweise vordefiniert

weiter

Trainingslager: Listen und Paare

Listen
als Ersatz für Schleifen
1. Aufgabe
Suche nach einem Wort in einem Text
2. Aufgabe
Verallgemeinerung: Position des ersten, des letzten, aller Vorkommen
3. Aufgabe
Besucher für Listen: foldr und foldl

weiter

Trainingslager: Bäume

Binäre Suchbäume
1. Aufgabe
Binärer Suchbaum: Einfügen, Suchen, map und fold

Letzte Änderung: 27.03.2015
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel