86 lines
2.6 KiB
Markdown
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!"
|
|
|