> wow, haskell ist ja extrem kryptisch.
Ne, eigentlich überhaupt nicht. Es ist nur nicht die hunderste
"Erfindung" einer irgendwie gearteten C-Variante. Da es eine funktionale
Sprache ist, ist Haskells Stärke eben der Umgang mit Funktionen, Listen
und Pattern-Matching auf Argumente. Funktionen wie map, filter, fold,
zip in ihren verschiedenen Variationen lesen sich für ein
Haskell-Programmierer wie break, continue, while, return, switch etc.
für C-Programmierer.
Hier mal eine Erklärung der Lösung zur Aufgabe 48:
Grundsätzlich werden die Argumente zu Funktionen in Haskell ohne
Klammern geschrieben. In C ein
wird in Haskell einfach zu
Wenn eine Funktion mehrer Parameter hat, kommen keine Kommas
dazwischen.
Der $-Operator ruft Funktionen nacheinander auf, von rechts nach links.
Anstatt
kann man
schreiben.
Ok, nun Schritt für Schritt:
erzeugt eine Liste (lineare Liste) mit den Zahlen 1 bis 1000.
Die Funktion "map" hat zwei Parameter. Der erste eine Funktion, der
zweite eine Liste. Map ruft für jedes Element der Liste die Funktion auf
und speichert das Ergebnis in einer neuen Liste.
Mit
erzeugt man eine "anonyme Funktion" (Lambda). Also
ist eine Funktion, die ein Argument erhält und als Ergebnis eben x^x
zurück gibt.
Kombiniert:
macht aus einer Liste [1,2,3,4,...] eine Liste [1,4,27,256,...].
Weiter: Die Funktion sum addiert alle Elemente einer Liste zusammen.
Die Funktion show macht aus einer Zahl ein String. Ein String ist eine
Liste aus Zeichen.
Die Funktion reverse dreht eine Liste um, in diesem Fall wird der String
also rückwärts.
Die Funktion take nimmt eine bestimmte Anzahl von Elementen einer Liste
vom Anfang, also take 10 nimmt die ersten 10 Zeichen des Strings (in
Wirklichkeit die letzten 10, weil wir den String ja gespiegelt haben).
Der nächste Schritt ist diese 10 Zeichen wieder umzudrehen. Dann bleibt
noch print übrig.
Das war's. Überhaupt nicht kryptisch.