next up previous
Nächste Seite: Code-Generierung und -Optimierung Aufwärts: Compilerbau Vorlesung, Wintersemester 2003 Vorherige Seite: Typsysteme (5. 1.)

Übung Typsysteme 16. 1.

Übung 16. 1.

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 length
Zeilen-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/


next up previous
Nächste Seite: Code-Generierung und -Optimierung Aufwärts: Compilerbau Vorlesung, Wintersemester 2003 Vorherige Seite: Typsysteme (5. 1.)
Johannes Waldmann 2004-01-28