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
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.
Konkatenation auf Listen
Keine Zeiger, referenzielle Transparenz
Funktionen mit I/O müssen anders behandelt werden als reine Funktionen
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
für I/O-behaftete Berechnungen
getLine
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
length
ad-hoc-Polymorphie
Typklassen
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)
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
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
von Funktionen
vordefiniert
vordefiniert
vordefiniert
vordefiniert
merke
Weitere Kombinatoren werden folgen

weiter

Currying

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

weiter

Algebraische Datentypen

Selbstdefinierte Datentypen
auch generisch
von Zahlen
generisch, vordefiniert mit eigener Listensyntax
zweistellig, mit Information an den inneren Knoten
zweistellig, mit Information an den Blättern
zweistellig, mit Information an den inneren Knoten und den Blättern
vordefiniert
vordefiniert
in Tupelschreibweise vordefiniert

weiter

Trainingslager: Listen und Paare

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

weiter

Trainingslager: Bäume

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

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