Haskell (Programmiersprache)
wegen des englischen Kunsthistorikers Francis Haskell (1928-2000) siehe: Francis Haskell
Haskell ist eine funktionale Programmiersprache, benannt nach dem Mathematiker Haskell Brooks Curry. Haskell ist statisch typisiert, unterstützt die verzögerte Auswertung (engl. lazy evaluation), ist eine funktionale Sprache höherer Ordnung und erlaubt die Verwendung polymorpher Datentypen. Die aktuellste Version der Sprache ist Haskell 98.
Die klassische Definition der Fakultätsfunktion:
Beispiele
fac 0 = 1
fac n = n * fac (n - 1)
Eine elegante Definition, die Haskells Notation für Listen benützt:
fac n = product [1..n]
Die naive Implementierung der Fibonacci-Funktion:
fib 0 = 0 fib 1 = 1 fib n = fib (n - 2) + fib (n - 1)Eine schnelle Implementierung derselben Funktion:
fibs = 0 : 1 : (zipWith (+) fibs (tail fibs))Diese Definition erzeugt eine unendliche Liste und faltet diese mit der zipWidth Funktion. Unendliche Datenstrukturen können dank lazy evaluation in Haskell elegant dargestellt werden.
Der QuickSort-Algorithmus, formuliert in Haskell:
qsort [] = []
qsort (x:xs) = qsort elts_lt_x ++ x ++ qsort elts_greq_x
where
elts_lt_x = [y | y <- xs, y < x]
elts_greq_x = [y | y <- xs, y >= x]
- Die erste Zeile gibt an, dass die Funktion auf eine leere Liste angewendet wieder eine leere Liste ergeben soll. Die zweite Zeile sortiert rekursiv nicht-leere Listen: das erste Element
xwird als mittleres Element der Ergebnisliste verwendet. Davor werden sortiert alle kleineren, dahinter alle größeren Elemente eingeordnet. Die letzten beiden Zeilen stehen in einer lokalen Definition. Listenbeschreibungen werden dazu verwendet, aus der Restlistexsalle kleineren bzw. größeren Elemente alsxauszuwählen. Leider ist diese Quicksort-Implementierung sehr ineffizient: Das Kopieren und Verlinken vieler kleiner Listen sorgt für eine durchschnittliche Laufzeit von
.
Weblinks






