uebung2017_2/src/Aufgabe4.md
Yannick Gottschalk aab564e716 Added Aufgabe 4
2017-04-30 23:33:56 +02:00

86 lines
2.6 KiB
Markdown

Aufgabe 4
=========
> module Aufgabe4 where
Ein paar Infos
--------------
In der Vorlesung haben Sie schon kennengelernt, dass Haskell 'Lazy' ist. In
dieser Übung werden Sie dies graphisch erfahren können.
Hinweis:
Da wir direkt auf den Evaluationstatus von einzelnen Ausdrücken zugreifen
wollen, und sich der compilierte ByteCode von unterschiedlichen GHC Versionen
sehr unterschiedlich ist, arbeiten wir für diese Übung mit GHC < 8.*
Zur Visualisierung der Ausdrücke nutzen wir ghc-vis. Dies integriert sich
dank eines Scripts direkt in den GHCi.
Befehle:
:vis Öffnet das ghc-vis Fenster (haben Sie dies geschlossen müssen Sie
vermutlich den GHCi nocheinmal starten bevor Sie ghc-vis erneut öffnen
können
:view x Zeigt den Ausdruck "x" grafisch an
:switch Schaltet den Anzeigemodus um
:clear Säubert die Anzeige
Aufgabenstellung
----------------
> ones = [1,1..]
>
> list = [1,3..]
>
> list' = [1,5..]
Starten Sie nun ghc-vis mit dem Befehl ":vis" und lassen sich zunächst `ones`
anzeigen ":view ones"
Sie können einfach auf einen Eintrag klicken um diesen evaluieren zu lassen
(dafür darf der Eintrag noch nicht vollständig evaluiert sein).
Dies können Sie nun auch mit den anderen Listen machen.
(1) Erstellen Sie eine PDF (ghc-vis > File > Export) in der die Listen bis
mindestens zu ihrem 10ten Element ausgewertet sind. Fassen Sie zusätzlich in
Stichpunkten die Unterschiede der Listen zusammen.
Lassen Sie sich nun auf die gleiche Art eine unendliche Liste aller Fibonacci
Zahlen anzeigen.
> f = 0:1:zipWith (+) f (tail f)
:clear
:view f
(2) Interpretieren Sie das nun sichtbare in kurzen Stichpunkten. Erstellen Sie nun
eine PDF in der die ersten 10 Fibonacci Zahlen UNAUSGEWERTET (also als Thunks)
vorliegen. Nun sollte es für Sie möglich sein, mit einem Klick alle noch nicht
berechneten Fibonacci Zahlen berechnen zu lassen. Speichern Sie auch diesen
Graph als PDF.
> primes = sieve [2..] where sieve (p:xs) = p : sieve [x | x <- xs, x `mod` p > 0]
Lassen sie sich `primes` im ghc-vis anzeigen. Dies stellt eine unendliche Liste
von Primzahlen dar, die durch das "Sieb des Eratosthenes" erzeugt werden.
Das Prinzip dieses Siebes ist es, Primzahlen zu finden, indem jede Zahl mit
2 beginnend `[2..]` durch alle bereits gefundenden Primzahlen geteilt wird, um
zu prüfen, ob eine unteilbare Zahl, und damit eine Primzahl, vorliegt.
(3) Erstellen Sie eine PDF, in der noch nicht gefilterte/überprüfte Zahlen
(5-10) zu erkennen sind, sowie bereits als Primzahl erkannte Zahlen UND Zahlen, die
bereits teilweise gefiltert sind.
> result = "No need to write code for this exercise!"