• Keine Ergebnisse gefunden

2.3 Guards vs. If

N/A
N/A
Protected

Academic year: 2022

Aktie "2.3 Guards vs. If"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Till Mossakowski Stephan Günther Funktionale Programmierung - Fortgeschrittene Konzepte und Anwendungen

WS 2019/20

2. Übungsblatt

Ausgabe: 2019-10-21 Abgabe: 2019-10-24

Mit*markierte Aufgaben sind spezielle Aufgaben für Studierende die 6 CP für die Lehrveranstaltung benötigen. Diese Aufgaben zählen bei der Ermittlung der prozentualen Votierung zur Gesamtzahl der Aufgaben hinzu, können also von al- len Studierenden votiert werden. Um 6 CP für die Lehrveranstaltung zu erhalten müssen allerdings am Ende des Semesters von diesen Aufgaben alle bis auf zwei votiert und mindestens eine vorgetragen worden sein.

2.1 Quersumme

DieQuersummeeiner natürlichen Zahl ist die Summe ihrer Ziffern. Wir können das rekursiv so berechnen (wobeiquer(x) die Quersumme der Zahlxsei, undx÷ydie ganzzahlige Division vonxdurchy):

quer(x)=def

0 x= 0

xmod 10+quer(x÷10) sonst (1)

Implementieren Sie eine Haskell-Funktion

quer :: Natural→ Natural

welche die Quersumme berechnet:

quer 5 5

quer 457 16

Hierbei istNaturalder Typ für beliebig große natürliche Zahlen (analog zuInteger).

2.2 Präfixe

Ein Stringsist einPräfixeines anderen Stringst, wennsundtmit der gleichen Zeichenkette anfangen. Wir können das rekursiv formulieren:sist ein Präfix vont, wenn

• entwedersleer ist, oder

• der Kopf vonsundtgleich ist, und der Rest vonsein Präfix des Restes vontist.

Definieren Sie eine Funktion

isPrefixOf :: String→ String→ Bool

welche diesen Test implementiert, z.B.

isPrefixOf " " "Foo" True isPrefixOf "baz" "bazbar" True isPefixOf "bar" "bazbar" False

2.3 Guards vs. If

Aus der Vorlesung kennen Sie Funktionsdefinitionen via durchGuardsbedingte Gleichungen als syntaktischen Zucker für, möglicherweise verschachtelte,if-Verzweigungen.

— Seite 1 von 2 —

(2)

2. Übungsblatt

Funktionale Programmierung - Fortgeschrittene Konzepte und Anwendungen WS 2019/20 , a) Alternative Implementierungen

Schreiben Sie alternative Implementierungen für ihre Lösungen der Aufgaben 2.1 und 2.2 . Verwenden Sie hierzu jeweils Guards falls Sie für die Originalimplementierung if-Verzweigungen verwendet haben und if- Verzweigungen, falls Sie für die OriginalimplementierungGuardsverwendet haben. Sollte(n) ihre ursprüngliche(n) Implementierung(en) keines der beiden Konstrukte nutzen, nutzen Sie jeweils eins der Konstrukte in den Neuim- plementierungen.

b) Otherwise

Aus der Vorlesung ist ebenfalls otherwiseals jeden, vorher nicht behandelten, Fall abfangendes Konstrukt in- nerhalb einesGuardsbekannt. Wie kann man innerhalb eines einesGuardsjeden Fall abfangen und dabei etwas anderes alsotherwiseverwenden? Überlegen Sie sich zwei Alternativen.

2.4 Jeder ist ein Bisschen Faul

Aus der Vorlesung ist ebenfalls bekannt, dass Haskell alsnon-strictdefiniert ist, während die meisten anderen Sprachen strictsind. Nennen Sie mindestens einnicht-striktesKonstrukt aus einer Sprache deren Funktionenstrictsind. Überlegen Sie sich ob jede Sprache mindestens einnicht-striktesKonstrukt besitzen sollte oder ob dies unnötig ist.

2.5 * Vervollständige das Präfix

Schreiben Sie eine FunktionasPrefixOf :: String -> String -> Stringdie ein gegebenes Präfix einer gegebe- nen Zeichenkette voranstellt, dabei aber im zweiten Argument bereits vorhandene Teilketten des Präfixes nutzt und nicht dupliziert. Das heißtasPrefixOfimplementiert die folgenden Tests:

asPrefixOf "Foo" " " "Foo"

asPrefixOf " foo " " barfoo " " foobarfoo "

asPrefixOf " foo " " foobar " " foobar "

asPrefixOf "bar" "bazbar" "barzbar"

asPrefixOf " foobar " "obrbaz" "foobarbaz"

— Seite 2 von 2 —

Referenzen

ÄHNLICHE DOKUMENTE

· Nur dann, wenn die Punkte für eine Aufgabe nicht differenziert vorgegeben sind, ist ihre Aufschlüsselung auf die einzelnen Lösungsschritte Ihnen überlassen.. · Stoßen Sie

Produktfixkosten werden durch ein Erzeugnis verursacht und lassen sich nicht einem Artikel allein zurechnen (z. Entwicklungskosten, pauschale Patent- und Lizenzgebühren, Werbekosten

a) Kennzeichnen Sie die Grundsätze ordnungsmäßiger Abschlussprüfung (GoÄ). 6 Punkte b) Nennen Sie zwei der drei Bereiche für Grundsätze ordnungsmäßiger Abschlussprüfung.

b) Zeigen Sie auf, ob und inwiefern Sie folgende Informationen entweder für das Brutto-Verfahren, für das Nettoverfahren, für beide Verfahren oder gar nicht für Zwecke dieser

Immobilitätsrisiko: Dieses resultiert daraus, dass (nicht börsennotierte) Unternehmen bzw. Unternehmensanteile nicht so leicht ge- und verkauft werden können wie eine

Bearbeiten Sie das Thema: „Organisation des Controlling“. Gehen Sie im Rahmen ihrer Antwort auf organisatorische Grundsätze für die Einrichtung des Controlling, auf

Zwei Funktionen dürfen mit einem nachfolgenden Ereignis über eine Oder-Verknüpfung verbunden werden.. Bei einer Oder-Verknüpfung schließen sich die darauf- folgenden

Wird bei einem Quadrat eine Seite um 4 cm verlängert, dann entsteht ein Rechteck, welches eine um 20 cm 2 grössere Fläche hat4. Wie gross war die ursprüngliche