Sie sollen jetzt nicht Funktionales Programmieren lernen, sondern nur advanced Typchecking üben, indem sie (Fehler-)Meldungen von Hugs studieren und verstehen.
Sprache Haskell http://www.haskell.org/, Interpreter Hugs http://www.haskell.org/hugs/
$ export PATH=/home/waldmann/built/bin:$PATH $ hugs +tT Prelude> 1 Prelude> [1 .. 100] Prelude> :t lengthZeilen-Editor verwenden (Kursor hoch/runter, Control-A,E,P,N usw., wie bash)
hugs verlassen mit Control-D
Beispiele
Fakultät von 100:
product [ 1 .. 100 ]als Zeichenkette:
show $ product [ 1 .. 100 ]Auf wieviele 0 endet die Fakultät von 100?
length $ takeWhile (== '0') $ reverse $ show $ product [ 1 .. 100 ]
Listen und Tupel und Funktionen
Stellen Sie den Typ von takeWhile fest (:t) und erläutern Sie.
Rufen Sie die Funktion dropWhile auf (d. h. geben Sie ihr passende Argumente).
Unbenannte Kreuzprodukte werden als Tupel geschrieben
(7, True, "foo")Probieren Sie die Funktionen fst und snd aus.
Rufen Sie die Funktion zip auf. Desgl. für zipWith
concat
Weitere Typ-Rätsel
Finden Sie passende Argumente für map map
rufen Sie curry und uncurry auf.
Prüfen Sie von Hand Typ und Wert für
d succ 0 where d f x = f (f x) ((d d) succ) 0 where d f x = f (f x)
Ergänzungen
Quelltexte der Standardfunktionen:
/home/waldmann/built/lib/hugs/lib/Prelude.hs
Sprach-Definition: http://haskell.org/onlinereport/
Programm-Beispiele: Autotool-Quellen: http://theo1.informatik.uni-leipzig.de/cgi-bin/cvsweb/autotool/