Haskell
2009-10-19 20:10
Fred
Haben wir tatsächlich noch keinen Haskell-Thread? [3]
Ich benutze Haskell hauptsächlich als Horizonterweiterung und Gehirnjogging. Was macht ihr so interessantes in Haskell?
Zwei Beispiele, die anhand eines Vergleichs mit C demonstrieren, warum ich Haskell super finde:
Eine kostenlose Einführung in Haskell gibt es als ebook.
Ich benutze Haskell hauptsächlich als Horizonterweiterung und Gehirnjogging. Was macht ihr so interessantes in Haskell?
Zwei Beispiele, die anhand eines Vergleichs mit C demonstrieren, warum ich Haskell super finde:
/* C-Funktion akzeptiert nur C-Strings */
int len(char s[])
{
int len = 0;
while (s[len]) ++len;
return len;
}
-- Haskell-Version akzeptiert dagegen alle Listen
len = foldr (const (+1)) 0
/* C-Funktion akzeptiert nur C-Strings
und verändert das Array in-place */
void rev(char s[])
{
int n = len(s);
int i, k;
for (i = 0, k = n-1; i < k; ++i, --k)
{
char temp;
temp = s[i];
s[i] = s[k];
s[k] = temp;
}
}
-- Haskell-Version akzeptiert dagegen alle Listen
-- und lässt die Original-Liste unverändert
rev = foldl (flip (:)) []
Das Schreiben eines korrekten Quicksort in C war mir jetzt zu aufwändig, daher an dieser Stelle nur die legendäre Haskell-Version:
sort [] = []
sort (pivot:rest) = sort (filter (< pivot) rest)
++ pivot
: sort (filter (> pivot) rest)
Ja, ich weiß, dass das Pivot-Element nicht günstig gewählt wird. Aber der Code ist einfach wunderschön!Eine kostenlose Einführung in Haskell gibt es als ebook.