HTWK Leipzig, Fakultät IMN Prof. Dr. Sibylle Schwarz [email protected] 2.Übung zur Vorlesung Deklarative Programmierung“ ” Sommersemester 2015 gestellt am 28. April 2015 Aufgabe 2.1 (Rekursion) Definieren und implementieren Sie die folgenden rekursiven Funktionen in Haskell: falls n = 0 0 1 falls n = 1 a. Fibonacci-Zahlen: fib(n) = fib(n − 2) + fib(n − 1) sonst 0 falls n = 0 1 falls n = 1 b. Stern-Brocot-Folge: sb(n) = sb(m) falls ∃n ∈ : n = 2m sb(m) + sb(m + 1) falls ∃n ∈ : n = 2m + 1 N N c. Funktion n01, die bei Eingabe n ∈ N die Liste [0,| 1, 0, 1,{z. . . , 0, 1}] zurückgibt n−mal 0,1 d. Funktion fromPeano :: Nat -> Int zur Umrechnung von Peano-Zahlen in die übliche Dezimaldarstellung der natürlichen Zahlen (den Typ Nat der Peanozahlen müssen Sie dazu erst definieren), e. Umkehrfunktion toPeano :: Int -> Nat Aufgabe 2.2 (Peano-Zahlen) a. (autotool) Definieren und implementieren Sie die Addition plus, Multiplikation times, und die Potenzierung power auf Peano-Zahlen. Überprüfen Sie Ihre Implementierungen mit Hilfe der Konvertierungen toPeano und fromPeano aus der ersten Aufgabe. b. Bestimmen Sie durch schrittweise Reduktion die Normalformen der Ausdrücke: (a) (autotool) add ( S ( S ( S Z ) ) ) ( S ( S Z ) ) (b) mult ( S Z ) ( S ( S Z ) ) (c) pot ( S ( S ( S Z ) ) ) (S ( S Z ) ) Aufgabe 2.3 (Strukturelle Induktion) Zeigen Sie durch strukturelle Induktion, dass a. die Addition der Peanozahlen assoziativ ist, b. die Addition der Peanozahlen kommutativ ist, c. für jede Peanozahl x gilt: mult x ( S Z ) = x d. für jede Peanozahl x gilt: mult ( S Z ) x = x e. für jede Peanozahl x gilt: pot ( S Z ) x = S Z Übungsaufgaben, Folien und weitere Hinweise zur Vorlesung finden Sie online unter www.imn.htwk-leipzig.de/~schwarz/lehre/ss15/dp.