Vorlesung: Praxis der Funktionalen Programmierung


Der Interpreter Hugs

Hugs kann einen Modul-Quelltext laden und dann Ausdrücke auswerten oder Aktionen ausführen, die in diesem Modul definiert sind.

Hugs unterscheidet dabei: Ist der Ausdruck vom Typ IO (), das heißt, eine Aktion, dann wird diese ausgeführt. Beispiel:

Prelude> putStrLn "hello"
hello
Bei Ausdrücken anderer Typen zeigt Hugs eine ASCII-Repräsentation des Wertes an. Beispiel:
Prelude> take 10 [1..]
[1,2,3,4,5,6,7,8,9,10]
Beachte: nicht für alle Typen existiert so eine Repräsentation. Das führt zu solchen Fehlermeldungen:
Prelude> show id
ERROR: Illegal Haskell 98 class constraint in inferred type
*** Expression : show id
*** Type       : Show (a -> a) => [Char]
Für nutzerdefinierte Typen muß man die Repräsentation entweder selbst festlegen oder vom Compiler explizit generieren lassen. Siehe später bei Typklassen.

Elementare Grafik

(Das Graphics-Paket muß installiert sein.)

Ein Grafik-Programm ist ebenfalls eine Aktion. Es sieht im einfachsten Fall so aus:

import SOEGraphics
main = runGraphics $ do
     let s = 500
     w <- openWindow "Grafik" (s, s)
     drawInWindow w $ polyline [(0,0), (s,s)]
     k <- getKey w
     closeWindow w
Beachte: nach dem "do" müssen die Zeilenanfänge genau untereinander stehen.

Was das "do" überhaupt ist, behandeln wir später ausführlich.

Kasten-Grafik

Mit der elementaren Grafik müssen wir ständig in globalen Koordinaten rechnen. Ich habe eine kleine Bibliothek geschrieben (Quelltexte hier), die Zusammensetzungen aus Kästen gestattet, innerhalb derer wir mit lokalen (oder gar keinen) Koordinaten arbeiten. Die Implementierung sehen wir uns später an. Die Benutzung geht so:
import Bild
...
bild $ neben ( über (kreis 1) (kreis 2) ) ( quadrat 3 ) 
Einige Datentypen "t" implementieren die Methode "form :: t -> Bild", und es gibt die Abkürzung "zeige x = bild (form x)". Beispiel
import Bild
import Ding
import Form
...
zeige [ [ rot, blau, gelb ], [schwarz, blau] ]
Zu Methoden (und Typklassen und Instanzen) hören wir später mehr.

best viewed with any browser


http://www.informatik.uni-leipzig.de/~joe/ mailto:joe@informatik.uni-leipzig.de