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