1.¨Ubungsblatt - Deussen, Oliver

Werbung
Konzepte der Programmierung
Programmierkurs 2
Sommer 2012
Universität Konstanz
Informatik & Informationswissenschaft
Oliver Deussen, Claus Zinn
1. Übungsblatt
(Ausgabe: 18. April 2012 — Abgabe: 25. April 2012, 13:30 (vor dem PK2 Kurs))
Zur Beruhigung Auf diesem Übungsblatt kommen bereits Haskell-Sprachelemente vor, die noch
nicht klar in der Vorlesung eingeführt worden sind. Es ist also nicht verwunderlich, wenn einige
Dinge noch etwas nebulös scheinen.
Einteilung in Zweiergruppen
Aufgabe 1 Die Übungsaufgaben sollen –bis auf die Zwischenklausur – in Zweiergruppen gelöst
werden. Suche einen Übungspartner, und tragt Euch ab Mittwoch (18.4) 15:30 Uhr als Zwei(!)ergruppe in den Listen – die auf Z7 aushängen – für eines der Tutorate ein.
Installation von SVN und Haskell
Aufgabe 2 Installiere auf Deinem Rechner Subversion1 und mache Dich mit der grundlegenden Funktionalität vertraut. Subversion ist bereits Bestandteil vieler Linux-Distributionen und
üblicherweise über die entsprechende Paketverwaltung verfügbar. Auf den Maschinen im Rechnerpool ist Subversion bereits eingerichtet. Das Buch Version Control with Subversion ist online
verfügbar2 , zum schnellen Einstieg die Kapitel Creating a Working Copy 3 und Basic Work Cycle 4
lesen.
Aufgabe 3 Installiere auf Deinem Rechner den Glasgow Haskell Compiler (GHC). Auch dieser
sollte über das Paketsystem Deiner Linux-Distro erhältlich sein, oder Du installierst die HaskellPlatform5 . Außerdem brauchst Du noch einen Texteditor, wie emacs, vi etc.
Auf den Maschinen im Rechnerpool sind der GHC und einige Editoren bereits installiert.
Erste Erfahrungen mit Haskell und SVN
Aufgabe 4 Mit ghci am Shell Prompt startet der interaktive Interpreter des GHC — den
Compiler ghc (ohne i) werden wir erstmal nicht benutzen. Am Prompt (Prelude>) können
Haskell-Ausdrücke ausgewertet werden.
Starte den Interpreter GHCi, und tippe einfache arithmetische Ausdrücke ein. Folge Funktionen
sind bereits vordefiniert und sollten von Dir ausprobiert werden:
1. Addition, Subtraktion, Multiplikation, Division: +, -, *, /.
2. Wurzelfunktion: sqrt
3. Ganzzahlige Division: ‘div‘ (z.B. 9 ‘div‘ 2 _ 4. Wichtig: Nicht ’div’, sondern ‘div‘,
also ASCII 0x60.)
4. Ganzzahliger Rest: ‘mod‘ (z.B. 12 ‘mod‘ 5 _ 2.)
1 http://subversion.apache.org/
2 http://svnbook.red-bean.com/
3 http://svnbook.red-bean.com/nightly/en/svn.tour.initial.html
4 http://svnbook.red-bean.com/nightly/en/svn.tour.cycle.html
5 http://hackage.haskell.org/platform/
Bitte wenden!
−−−−−−−−−→
Du kannst Klammern (,) zur Schachtelung der Ausdrücke verwenden. Lass Dich von etwaigen
Fehlermeldungen nicht entmutigen. Vermutlich deuten sie auf einen einfachen Tippfehler hin,
aber vielleicht bist Du auch auf ein Merkmal von Haskell gestoßen, das wir noch nicht besprochen
haben.
Merke Dir Fragen und stelle sie während der Tutorate!
Subversion Mittlerweile (Voraussetzung: Aufgabe 1) solltest Du eine Mail bzgl. Deiner Übungsteilnahme bekommen, und entsprechend der dortigen Anweisungen das aktuelle Vorlesungsmaterial
ausgecheckt haben. Folge den weiteren Hinweisen in der Mail, so findest Du das Haskell Script
assignment01.lhs; es spielt eine Rolle in den weiteren Aufgaben.
Aufgabe 5 (6 Punkte) Am Prompt des GHCi kann man auch einige Kommandos eingeben,
die den Interpreter steuern. :help listet all diese Kommandos auf, :load filename lädt ein
Haskell Script, :reload lädt ein zuvor geladenes Script nochmal (z.B. nach Änderungen), und
:quit beendet den Interpreter. Man kann solch ein Kommando auch durch sein eindeutiges
Prefix abkürzen, also z.B. :l foo.hs statt :load foo.hs.
Das Script assignment01.lhs (lesen!) definiert die drei Funktionen xxx, foo, und bar. Lade das
Script in den GHCi (mit :load, das GHCi-Prompt ändert sich in *Main>) und teste verschiedene
Aufrufe der Funktionen, etwa xxx 10 oder foo 28 12 oder bar 33. Versuche, auf diese Art und
Weise herauszufinden, was der Zweck dieser Funktionen ist.
Benenne die Funktionen geeignet um und kommentiere sie ausgiebig.
Aufgabe 6 (2 Punkte) Probiere aus, ob die 42 in der letzten Zeile der Definition von bar auch
durch folgende Ausdrücke ersetzt werden könnte:
• x
• "text"
• 1 ‘div‘ 0
• 1 / "text"
Was beobachtest Du? Woran könnte es liegen, dass sich Haskell gerade so verhält?
Wichtig Einchecken der Lösungen für die Aufgaben 5 und 6 ( svn add und svn commit) nicht
vergessen — siehe Mail!
Herunterladen