Programmierparadigmen Fachgebiet Telematik/Rechnernetze Prof. Dr.-Ing. Günter Schäfer SS 2017 Übungsblatt 3 Aufgabe 1 Falten In der Vorlesung haben Sie bereits die beiden Funktionen foldl und foldr kennengelernt, welche auch als Faltungen bezeichnet werden. a) Definieren Sie eine Funktion ggT, die den größten gemeinsamen Teiler einer Liste von Ganzzahlen errechnet (Beispiel: ggt([18, 60, 36]) == 6.). Hinweis: Um zunächst den ggT zweier als Parameter übergebenen Zahlen zu berechnen, können Sie auf den bekannten euklidischen Algorithmus zurückgreifen. Anschließend können Sie die Funktion foldl verwenden, um die Teilaufgabe zu lösen. b) Definieren Sie nun eine Funktion kgV, welche analog dazu das kleinste gemeinsame Vielfache einer Liste von Ganzzahlen bestimmt. Hinweis: Sie können bei der Lösung der Teilaufgabe folgenden Zusammenhang ausnutzen: |x × y| = ggT(x , y) × kgV(x , y). c) Skizzieren Sie bitte, wie das Erlang-System die Anfrage kgV ([2, 3, 6, 5]). bearbeitet. Aufgabe 2 Filtern Gegeben sei eine Liste ls aus natürlichen Zahlen und eine beliebige einargumentige Funktion f (x ), wobei x ∈ N. Definieren Sie eine Funktion eqklassen, welche die Liste der Äquivalenzklassen der Elemente in ls bezüglich f berechnet. Eine Äquivalenzklasse soll dabei durch die Liste ihrer Elemente repräsentiert werden. Beispiele: – eqklassen(fun id /1, [1, 2, 3, 2, 1]) == [[1, 1], [2, 2], [3]]. Hierbei ist id die Identitätsfunktion id (X ) → X . – Sei eine Funktion modThree wie folgt gegeben: modThree(X ) → X rem 3. Dann soll gelten: eqklassen(fun modThree/1, [1, 2, 3, 4, 5, 6, 7]) == [[1, 4, 7], [2, 5], [3, 6]]. Verwenden Sie wahlweise die Funktion filter oder List Comprehensions, um die Aufgabe zu lösen. Achten Sie bitte darauf, dass keine Äquivalenzklasse mehrfach ausgegeben wird. uebung3˙pparadigmen.tex @ 18. April 2017 : 15:09 Aufgabe 3 Zahlensysteme Definieren Sie eine Funktion wandeln, die eine Zahl zur Basis b1 in eine Zahl zur Basis b2 wandelt. Eine Zahl sei dabei als Integer-Liste gegeben. Die 5 hat zur Basis 2 beispielsweise die Darstellung [1, 0, 1]. b1 und b2 werden der Funktion als Parameter übergeben. Beispiel: wandeln(2, [1, 0, 1], 10) == [5], oder wandeln(4, [1, 3], 3) == [2, 1] Aufgabe 4 Abstraktes Übertragungsprotokoll Bei dem bereits aus der Vorlesung bekannten Alternating Bit Protocol (ABP) handelt es sich um ein einfaches Protokoll zur Datenübertragung über einen verlustbehafteten Kanal. Das Prinzip ist einfach: Der Sender wartet zunächst auf eine positive Empfangsbestätigung für ein übertragenes Paket, bevor das nächste Paket versendet wird. Somit fällt das Protokoll in die Kategorie der Automatic Repeat reQuest (ARQ) Protokolle. Außerdem lässt es sich als Stop-And-Go-Protokoll klassifizieren, da es - im Gegensatz zu Sliding-Window-Protokollen - zu einem Zeitpunkt und in eine Richtung immer nur ein einziges Paket zu übertragen versucht. Das Konzept dieses Protokolls soll in dieser Aufgabe in einer vereinfachten Variante veranschaulicht werden. Dazu muss das Beispiel aus der Vorlesung zunächst vervollständigt werden. a) Rekapitulieren Sie zunächst das Verhalten von Sender und Empfänger, sowie den Protokollablauf. Zur besseren Veranschaulichung können Sie beispielsweise einen einfachen Zustandsautomaten verwenden. b) Setzen Sie nun das beschriebene Verfahren zur Datenübertragung in Erlang um. Ergänzen Sie dazu das – auf den Fachgebietsseiten verfügbare – Beispiel alternatingBit.erl um die Funktionen senderReady1/1, receiverWait1/1 und senderProcess1/1. Um die Implementierung zu testen, können Sie schließlich auf die Funktion initialize(ErrorRate, NachrichtenAnzahl) zurückgreifen. c) Versuchen Sie, den Zustandsautomaten und – analog dazu – die Implementierung weiter zu vereinfachen, ohne die Zuverlässigkeit des Übertragungskonzeptes zu beeinflussen. Ist es möglich, mit einer geringeren Anzahl von Zuständen eine zuverlässige Übertragung zu gewährleisten? 2