Lösung für¨Ubungsblatt 1 - informatik.uni

Werbung
WS 2009/2010
Gruppe: ABC
Praktische Informatik 3
Tutor: James IV. Tudor
Lösung für Übungsblatt 1
Aufgabe 1
Abel Ausdruck
Bea Bedingung
Carl T. Class
Abgabe: 29.10.2009
Natürlich!
Der Typ Nat der natürlichen Zahlen enthält die Zahl Null, dargestellt durch den Konstruktor
Z (für engl. zero) und beliebig viele Nachfolger (engl. successor) von Null, die als rekursive
Anwendungen des Konstruktors S repräsentiert werden.
data Nat
= Z
| S Nat
-- zero
-- successor
Die Addition von natürlichen Zahlen kann so definiert werden:
plus :: Nat → Nat → Nat
plus
Z
y=Z
plus (S x) y = S (plus x y)
Analog dazu kann auch die Funktion times für die Multiplikation natürlicher Zahlen definiert
werden:
times :: Nat → Nat → Nat
times = undefined
Aufgabe 2
Verkehrt!
Listen sind ein polymorpher rekursiver Datentyp: Eine Liste über einer Typvariable t ist entweder leer (das Atom Empty), oder sie wird (mit dem Datenkonstruktor Cons) aus einem Element
des Typs t und einer Liste über t gebildet.
data List t = Empty | Cons t (List t)
Die Verkettung von Listen kann so definiert werden:
cat :: List t → List t → List t
cat
Empty
ys = ys
cat (Cons h t) ys = Cons h (cat t ys)
Die leere Liste Empty hat ist rechtsneutral für cat.
Theorem 1 (Die leere Liste ist rechtsneutral für die Verkettung)
∀ℓ ∈ List τ : cat ℓ Empty = ℓ
Proof. Durch Induktion über die Struktur von List τ .
(1)
Tutor: James IV. Tudor, Gruppe: ABC, Abel Ausdruck et. al.
PI 3, WS 2009/2010
Induktionsanfang. Sei ℓ = Empty in (1). Dann gilt:
cat Empty Empty
=
Empty
1. Gleichung von cat
Induktionsannahme. Gelte (1) für beliebige Listen ℓ der Länge n ≥ 0.
Induktionsschritt. Wir zeigen, dass dann (1) für alle Liste der Länge n + 1 gilt. So eine Liste hat
oBdA (ohne Beschränkung der Allgemeinheit) die Form Cons x ℓ, wobei ℓ höchstens n Elemente
enthält. Dann gilt:
cat (Cons x ℓ) Empty
= Cons x (cat ℓ Empty)
2. Gleichung von cat
= Cons x (cat Empty ℓ)
nach Induktionsannahme
=
1. Gleichung von cat
Cons x ℓ
Damit gilt (1) für Listen beliebiger Länge.
Nun kann auch die Funktion rev für die Umkehrung von Listen so definiert werden:
rev :: List t → List t
rev = undefined
Der Aufwand für diese Funktion ist . . .
Aufgabe 3
Hoch hinaus!
Die Funktion iteration, die eine Funktion f :: a → a n mal auf ein Argument x anwendet,
kann so definiert werden:
iteration :: Nat → (t → t) → t → t
iteration = undefined
Folgende Eigenschaften beschreiben einen Zusammenhang zwischen iteration und comp bzw.
map: . . .
2
Herunterladen