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

2.6 KiB

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!"