kNobelaufgabe: 4 - Universität des Saarlandes

Werbung
Fachrichtung 6.2 — Informatik
Universität des Saarlandes
Tutorenteam der Vorlesung Programmierung 1
Programmierung 1 (Wintersemester 2015/16)
kNobelaufgabe: 4
Hinweis: Dieses Übungsblatt enthält von den Tutoren für die Übungsgruppe erstellte Aufgaben.
Die Aufgaben und die damit abgedeckten Themenbereiche sind für die Klausur weder relevant noch irrelevant.
Schicken Sie ihre Lösung bis Dienstag, 17.11., 14:00 an [email protected]
Aufgabe: natürliche Zahlen und Listen revisited
Nachdem Sie Dieter glücklich aus den Fängen von Dark Dieter befreien konnten, hat sich Ihre Aufregung gelegt
und etwas Alltag ist eingekehrt. Sie möchten sich endlich wieder in aller Ruhe dem Programmierung I - Stoff
widmen. Doch was ist das? Offenbar hat Dieter letzte Woche mehr zerstört, als Sie dachten. Denn Ihr Interpreter
kennt keine int-Werte mehr. Zum Glück haben Sie schon mal von einer Idee gehört, natürliche Zahlen mit
Abstraktionen darzustellen (negative Zahlen sind uns nicht so wichtig). Nach etwas Nachdenken schreiben Sie
die folgende Gleichung für die Darstellung natürlicher Zahlen auf:
n := λ f a. f n a
Das heißt, die Zahlen 0, 1 und 2 ließen sich folgendermaßen darstellen:
0 := λ f a. a
1 := λ f a. f a
2 := λ f a. f (f a)
Aufgabe 4.1
(a) Geben Sie die Prozeduren intCod und codInt an, die für eine natürliche Zahl ihre neue Darstellung liefern,
bzw. diese zurückübersetzen.
(b) Geben Sie die folgenden nicht-rekursiven Prozeduren an, ohne Hilfprozeduren zu verwenden (also auch
nicht intCod und codInt) (n, m ∈ N):
(i) succ, die für n n + 1 liefert.
(ii) add, die für n und m n + m liefert.
(iii) mul, die für n und m n ∗ m liefert.
Nachdem Sie und Dieter nun endlich wieder mit Zahlen rechnen können, bahnt sich schon das nächste Problem
an. Auch Listen, die Sie gerade erst lieb gewonnen haben, sind dank Dieter verschwunden. Doch da fällt Ihnen
ein, dass man für diese eine ähnliche Darstellung wie für natürliche Zahlen verwenden kann.
Aufgabe 4.2
(a) Beschreiben Sie, wie Sie Listen mit Abstraktionen darstellen können. Geben Sie dazu erneut die Prozeduren
listCod und codList an, die zwischen Listen und ihrer Darstellung konvertieren. Ihre Darstellungsart soll
für jeden Listentyp funktionieren, ausgenommen verschachtelte Listen. Der Einfachheit halber nehmen wir
an, dass Ihr Interpreter normale ints nun wieder beherrscht.
(b) Geben Sie die folgenden nicht-rekursiven Prozeduren an, ohne Hilfsprozeduren zu verwenden (also auch
nicht listCod und codList):
(i) app, die für zwei Listen xs und ys xs@ys liefert.
(ii) forall, die prüft, ob ein Prädikat p für alle Elemente einer Liste xs gilt.
1
Herunterladen