Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 4 -

Größe: px
Ab Seite anzeigen:

Download "Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 4 -"

Transkript

1 Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 4 - Dozent: Prof. Dr. G. Rote Tutoren: J. Fleischer, T. Haimberger, N. Lehmann, C. Pockrandt, A. Steen Ziele dieser Übung Mit Funktionen höherer Ordnung sicher in Haskell umgehen und die Idee der strukturellen Induktion verstehen. In dieser Übung sollte man folgende Konzepte geübt und verstanden haben: ˆ Funktionen höherer Ordnung map takewhile foldr ˆ Strukturelle Induktion ohne Fallunterscheidung mit Fallunterscheidung ˆ Lauflängencodierung als Beispiel Aufgabe 19: Funktionen höherer Ordnung Drücken Sie die Funktion length mit Hilfe von sum und map und geeigneten selbst denierten Funktionen aus. (Eine Zeile sollte für die Denition reichen.) Lösung zu Aufgabe 19: mylength :: [a] -> Int mylength xs = sum ( map (\x -> 1) xs ) mylength' :: [a] -> Int mylength' = sum. map (\x -> 1) mylength ist äquivalent zu mylength' und zu length. 1

2 Aufgabe 0: Listenfunktionen Denieren Sie die Funktionen: takewhile :: (a -> Bool) -> [a] -> [a] splitat :: Int -> [a] -> ([a],[a]) Der Ausdruck takewhile p x erzeugt das Anfangsstück einer Liste x, solange die Elemente das Prädikat p erfüllen. splitat n x spaltet die Liste x nach den ersten n Elementen in zwei Teile auf. (Diese Funktionen sind in Haskell schon deniert. Zum Testen müssen Sie daher andere Funktionsnamen wählen.) Lösung zu Aufgabe 0: mysplitat :: Int -> [a] -> ([a],[a]) mysplitat 0 l = ([],l) mysplitat n [] = ([],[]) mysplitat n (x:xs) n > 0 = (x:xs1,xs) where (xs1,xs) = mysplitat (n-1) xs -- splitat n liste = (take n liste, drop n liste) mytakewhile :: (a -> Bool) -> [a] -> [a] mytakewhile _ [] = [] mytakewhile p (x:xs) p x = x : mytakewhile p xs otherwise = [] Aufgabe 1: Gemapte Zinsen Welchen Typ hat der Ausdruck map ( zinsen.5) im Zusammenhang von Aufgabe 4? Was bewirkt diese Funktion? Lösung zu Aufgabe 1: Die Funktion hat den Typ [Double] -> [Double], generiert also eine Funktion die eine Liste von Double-Werten als einziges Argument erwartet und eine Liste von Double-Werten zurückgibt. Diese Funktion berechnet für jedes Element der Eingabeliste die Zinsen bei einer Verzinsung von,5 %. Erklärung: Durch die Verwendung von map wird die partiell angewandte Funktion zinsen auf jedes Element in der Liste angewandt und eine neue Liste mit den Ergebnissen erstellt. Durch die Verwendung des Backticks (`) wird die Funktion als Inx-Operator verwendet, das rechte (zweite) Argument wird mit.5 belegt (den selben Eekt kann man übrigens auch mit der Funktion flip erzielen). Da das linke (erste) Argument ausgelassen wird, entsteht somit eine Funktion die das linke (erste) Argument der Funktion zinsen als einziges Argument erwartet (also das zu verzinsende Kapital).

3 Aufgabe : Nicht-assoziative Faltung von Listen Beschreiben Sie das Ergebnis der Funktion differenzen:: Integer -> Integer -> Integer -> Integer differenzen a b c = foldr (-) a [b..c] durch eine explizite Formel in den Gröÿen a, b, c (oder mehrere Formeln). Beweisen Sie Ihre Formel (zum Beispiel durch vollständige Induktion nach c b, oder auch direkt). Lösung zu Aufgabe : c-b = 0: b-a c-b = 1: b-((b+1)-a) c-b = : b-((b+1)-((b+)-a)) c-b = 3:... c-b = 4:... c-b = 5:... c-b = 6: = 0+b-a = -1+a = 1+b-a = -+a = +b-a = -3+a = 3+b-a differenzen' a b c c<b = a even (c-b) = (div (b+c) ) - a odd (c-b) = (div (b-c-1) ) + a a, falls c < b b + c f(a, b, c) = a, falls c b 0 und gerade b c 1 + a, falls c b 0 und ungerade Falls c < b ist, ist die Liste [b.. c] leer; damit folgt unmittelbar, dass das Ergebnis a ist. Es folgt ein Beweis für den Fall c b 0 mit vollständiger Induktion über c b. b + c a, falls (c b) gerade zu zeigen: a, b, c : foldr (-) a [b..c] = f(a, b, c) := b c 1 + a, falls (c b) ungerade Induktionsbasis: Für c b = 0 (d. h. c = b) gilt: foldr (-) a [b] = b - (foldr (-) a []) -- foldr. = b - a -- foldr.1 = (b+b)/ - a = f(a,b,b) Induktionsvoraussetzung: Für c b = k (d. h. c = b + k) und beliebiges a gilt: b + (b + k) a, falls k gerade foldr (-) a [b..(b+k)] = f(a, b, b + k) = b (b + k) 1 + a, falls k ungerade 3

4 Induktionsschritt: Für c b = k + 1 (d. h. c = b + k + 1) gilt: foldr (-) a [b..(b+k+1)] = foldr (-) a ([b..(b+k)] ++ [b+k+1]) = foldr (-) (foldr (-) a [b+k+1]) [b..(b+k)] -- Aufg. 3b = foldr (-) (b+k+1-a) [b..(b+k)] -- foldr.1/ Fall 1: k gerade foldr (-) a [b..(b+k+1)] = foldr (-) (b+k+1-a) [b..(b+k)] = (b+(b+k))/ - (b+k+1-a) -- IV = (b-(b+k+1)-1)/ + a = f(a,b,b+k+1) Fall : k ungerade foldr (-) a [b..(b+k+1)] = foldr (-) (b+k+1-a) [b..(b+k)] = (b-(b+k)-1)/ + (b+k+1-a) -- IV = (b+(b+k+1))/ - a = f(a,b,b+k+1) Es wurde mit vollständiger Induktion gezeigt, dass die angegebene Formel stimmt. Aufgabe 3: Strukturelle Induktion Aufgabe 3a: Beweisen Sie: map f (a ++ b) = map f a ++ map f b Lösung zu Aufgabe 3a: Folgende Funktionsdenitionen werden benötigt: map, ++ map::(a -> b) -> [a] -> [b] map _ [] = [] -- map.1 map f (x:xs) = (f x) : map f xs -- map. (++) :: [a] -> [a] -> [a] (++) [] ys = ys (++) (x:xs) ys = x : ((++) xs ys) Es folgt ein Beweis mit struktureller Induktion über xs. zu zeigen: map f (xs ++ ys) = map f xs ++ map f ys Induktionsbasis: xs == [] map f ([] ++ ys) = map f [] ++ map f ys [++.1] map f ys = map f [] ++ map f ys [map.1] map f ys = [] ++ map f ys [++.1] map f ys = map f ys 4

5 Induktionsschritt: xs (x:xs) Induktionsvoraussetzung: (IV) map f (xs ++ ys) = map f xs ++ map f ys Induktionsbehauptung: map f ((x:xs) ++ ys) = map f (x:xs) ++ map f ys [++.] map f (x:(xs ++ ys)) = map f (x:xs) ++ map f ys [map.] map f (x:(xs ++ ys)) = f x : (map f xs) ++ map f ys [++.] map f (x:(xs ++ ys)) = f x : (map f xs ++ map f ys) [map.] f x : map f (xs ++ ys) = f x : (map f xs ++ map f ys) [IV ] f x : (map f xs ++ map f ys) = f x : (map f xs ++ map f ys) Aufgabe 3b: Wie kann man foldr g z (a ++ b) durch foldr auf den Listen a und b ausdrücken? Beweisen Sie Ihre Formel. Lösung zu Aufgabe 3b: Folgende Funktionsdenitionen werden benötigt: foldr, ++ foldr :: (a -> b -> b) -> b -> [a] -> b foldr f z [] = z -- foldr.1 foldr f z (x:xs) = f x (foldr f z xs) -- foldr. (++) :: [a] -> [a] -> [a] (++) [] ys = ys (++) (x:xs) ys = x : ((++) xs ys) Behauptung: foldr g z (a ++ b) = foldr g (foldr g z b) a Es folgt ein Beweis mit struktureller Induktion über xs. zu zeigen: foldr op n (xs ++ ys) = foldr op (foldr op n ys) xs Induktionsbasis: xs == [] foldr op n ([] ++ ys) = foldr op (foldr op n ys) [] [++.1] foldr op n ys = foldr op (foldr op n ys) [] [foldr.1] foldr op n ys = foldr op n ys Induktionsschritt: xs (x:xs) Induktionsvoraussetzung: foldr op n (xs ++ ys) = foldr op (foldr op n ys) xs Induktionsbehauptung: foldr op n ((x:xs) ++ ys) = foldr op (foldr op n ys) (x:xs) [++.] foldr op n (x:(xs ++ ys)) = foldr op (foldr op n ys) (x:xs) [foldr.] op x foldr op n (xs ++ ys) = foldr op (foldr op n ys) (x:xs) [foldr.] op x foldr op n (xs ++ ys) = op x foldr op (foldr op n ys) xs [IV ] op x foldr op n (xs ++ ys) = op x foldr op n (xs ++ ys) xs 5

6 Aufgabe 3c: Drücken Sie elem x l durch map und foldr aus, und beweisen Sie damit indem Sie Aufgabe (a) und (b) verwenden. elem x (a ++ b) = elem x a elem x b, Lösung zu Aufgabe 3c: Folgende Funktionsdenitionen werden benötigt: map, ++, foldr map::(a -> b) -> [a] -> [b] map _ [] = [] -- map.1 map f (x:xs) = (f x) : map f xs -- map. (++) :: [a] -> [a] -> [a] (++) [] ys = ys (++) (x:xs) ys = x : ((++) xs ys) foldr :: (a -> b -> b) -> b -> [a] -> b foldr f z [] = z -- foldr.1 foldr f z (x:xs) = f x (foldr f z xs) -- foldr. Es gilt: elem n xs = foldr ( ) False (map (==n) xs) (1) zu zeigen: elem n (xs ++ ys) = elem n xs elem n ys Beweis: linke Seite = elem n (xs ++ ys) = (1) foldr ( ) False (map (==n) (xs++ys) = [3a] foldr ( ) False (map (==n) xs ++ map (==n) (xs++ys)) = [3b] foldr ( ) (foldr ( ) False (map (==n) ys)) (map (==n) xs) = (1) foldr ( ) (elem n ys)) (map (==n) xs) rechte Seite = elem n xs elem n ys = (1) foldr ( ) False (map (==n) xs) elem n ys = (), siehe unten foldr ( ) (elem n ys)) (map (==n) xs) Um die Behauptung zu zeigen, benötigen wir als Abschluss folgende Hilfsaussage: foldr ( ) z xs = z foldr ( ) False xs z () Beweis durch Induktion nach xs. Induktionsbasis: xs = []. zu zeigen: foldr ( ) z [] = foldr ( ) False [] z [foldr.1] z = False z Das ist gültig (einfach z=true und z=false einsetzen). 6

7 Induktionsschritt: von xs auf x:xs. Induktionsvoraussetzung: foldr ( ) z xs = foldr ( ) False xs z Induktionsbehauptung: foldr ( ) z (x:xs) = foldr ( ) False (x:xs) z linke Seite = foldr ( ) z (x:xs) = [foldr.] x foldr ( ) z xs = [I.V.] x (foldr ( ) False xs z) = [Der Operator ist assoziativ] (x foldr ( ) False xs) z = [foldr.] foldr ( ) False (x:xs) z = rechte Seite Aufgabe 3d: Beweisen Sie (take k). (take l) = take (min k l) Lösung zu Aufgabe 3d: Folgende Funktionsdenitionen werden benötigt: take, min, (.) take :: Int -> [a] -> [a] take _ [] = [] -- take.1 take n _ n<=0 = [] -- take. take n (x:xs) = x:(take (n-1) xs) -- take.3 min :: (Ord a) => a -> a -> a min x y x <= y = x -- min.1 otherwise = y -- min. (.) :: (a -> b) -> (c -> a) -> c -> b (.) f g x = f (g x) -- compose.1 Es folgt ein Beweis mit struktureller Induktion über xs. zu zeigen: (take k. take l) xs = take (min k l) xs Induktionsbasis: xs == [] (take k. take l) [] = take (min k l) [] [take.1] (take k. take l) [] = [] [compose.1] (take k (take l [])) = [] [take.1] take k [] = [] [take.1] [] = [] 7

8 Induktionsschritt: xs (x:xs) Induktionsvoraussetzung: (take u. take v) xs = take (min u v) xs, für alle u, v. Induktionsbehauptung: (take k. take l) (x:xs) = take (min k l) (x:xs) Fall 1: 0 < k l (take k. take l) (x:xs) = take (min k l) (x:xs) [compose.1] take k (take l (x:xs)) = take k (x:xs) [take.3] take k (x:(take (l-1) xs)) = x:(take (k-1) xs) take.3 x:(take (k-1) (take (l-1) xs)) = x:(take (k-1) xs) compose.1 x:((take (k-1)). (take (l-1)) xs) = x:(take (k-1) xs) IV x:(take (k-1) xs) = x:(take (k-1) xs) Fall : k > l > 0 (take k. take l) (x:xs) = take l (x:xs) comp.1 take k (take l (x:xs)) = take l (x:xs) take.3 take k (x:(take (l-1) xs)) = x:(take (l-1) xs) take.3 x:(take (k-1) (take (l-1) xs)) = x:(take (l-1) xs) compose.1 x:((take (k-1)). ((take (l-1) xs)) = x:(take (l-1) xs) IV x:(take (l-1) xs) = x:(take (l-1) xs) Fall 3: k 0. Es folgt daraus min k l <= 0. linke Seite = (take k. take l) (x:xs) = compose.1 take k ((take l) (x:xs)) = take. [] rechte Seite = take (min k l) (x:xs) = take. [] Fall 4: l 0. Daraus folgt min k l <= 0. linke Seite = (take k. take l) (x:xs) = compose.1 take k ((take l) (x:xs)) = take. take k [] = take.1 [] rechte Seite = take (min k l) (x:xs) = [] wie bei Fall 3. 8

9 Aufgabe 4: Lauflängenkodierung Aufgabe 4a: Bei der Lauflängenkodierung (run-length coding) wird eine Kette "aaaabbaaa" mit vielen wiederholten Zeichen komprimiert, indem man die Länge jedes Laufes (engl. run) von gleichen Zeichen nimmt: [(4,'a'), (,'b'), (3,'a')] Schreiben Sie eine Funktion, die diese Kodierung berechnet, und auch die Umkehrfunktion für die Dekodierung. Lösung zu Aufgabe 4a: -- erzeugt aus einer Zeichenkette eine Liste von Tupeln der Form: -- (Häufigkeit des Zeichens, Zeichen) encode :: [Char] -> [(Int, Char)] encode [] = [] encode (x:xs) = [(laenge + 1, x)] ++ encode rest where laenge = length (takewhile (== x) xs) rest = drop laenge xs -- erzeugt aus einer Liste von Tupeln der Form: (Häufigkeit des Zeichens, Zeichen) -- eine Zeichenkette decode :: [(Int, Char)] -> [Char] decode [] = [] decode (x:xs) = (replicate (fst x) (snd x)) ++ decode xs Aufgabe 4b: Unter der Annahme, dass die Eingabekette keine Ziern enthält, kann man die komprimierte Fassung kompakter als Kette "4ab3a" darstellen. Erweitern Sie die vorige Aufgabe auf diese Darstellung. Lösung zu Aufgabe 4b: --Eine Variante der Lauflaengenkodierung, die eine Zeichenkette liefert. encodestr :: String -> String encodestr "" = "" encodestr (c:cs) = show (length block) ++ [c] ++ encodestr rest where block = takewhile (== c) (c:cs) rest = dropwhile (== c) cs --Die entsprechende Funktion zur Dekodierung. decodestr :: String -> String decodestr "" = "" decodestr str = replicate (read num) c ++ decodestr xs where num = takewhile (`elem` ['0'..'9']) str (c:xs) = dropwhile (`elem` ['0'..'9']) str Alternativlösung: auf encode und decode aufbauen und nur die zusätzliche Übersetzung in eine Zeichenkette dazugeben (siehe Datei uebung4.hs). 9

Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 9 -

Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 9 - Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 9 - Dozent: Prof. Dr. G. Rote Tutoren: J. Fleischer, T. Haimberger, N. Lehmann, C. Pockrandt, A. Steen 10.01.2012 Ziele

Mehr

Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zur Übungsklausur -

Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zur Übungsklausur - Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zur Übungsklausur - Punkte: A1: 30, A2: 20, A3: 20, A4: 20, A5: 10, A6: 20 Punkte: /120 12.02.2012 Hinweis: Geben Sie bei allen

Mehr

Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 3 -

Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 3 - Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 3 - Dozent: Prof. Dr. G. Rote Tutoren: J. Fleischer, T. Haimberger, N. Lehmann, C. Pockrandt, A. Steen 01.11.2011 Ziele

Mehr

Funktionale Programmierung ALP I. Funktionen höherer Ordnung SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Funktionale Programmierung ALP I. Funktionen höherer Ordnung SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda ALP I SS 2011 Funktionstypen Funktionen haben einen Datentyp, der folgende allgemeine Form hat: functionname :: T 1 -> T 2, wobei T 1, T 2 wiederum beliebige Datentypen sind Beispiel: T 1 T 2 Der Datentyp

Mehr

Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 8 -

Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 8 - Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 8 - Dozent: Prof. Dr. G. Rote Tutoren: J. Fleischer, T. Haimberger, N. Lehmann, C. Pockrandt, A. Steen 03.01.2012 Ziele

Mehr

Funktionale Programmierung mit Haskell

Funktionale Programmierung mit Haskell Funktionale Programmierung mit Haskell Dr. Michael Savorić Hohenstaufen-Gymnasium (HSG) Kaiserslautern Version 20120622 Überblick Wichtige Eigenschaften Einführungsbeispiele Listenerzeugung und Beispiel

Mehr

Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 1 -

Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 1 - Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 1 - Dozent: Prof. Dr. G. Rote Tutoren: J. Fleischer, T. Haimberger, N. Lehmann, C. Pockrandt, A. Steen 18.10.2011 Ziele

Mehr

Programmieren in Haskell Einstieg in Haskell

Programmieren in Haskell Einstieg in Haskell Programmieren in Haskell Einstieg in Haskell Peter Steffen Universität Bielefeld Technische Fakultät 24.10.2008 1 Programmieren in Haskell Was wir heute machen Umfrage: Wer hat den Hugs ausprobiert? Ausdrücke

Mehr

Programmieren in Haskell

Programmieren in Haskell Programmieren in Haskell Wir steigen ein... Programmieren in Haskell 1 Was wir heute machen Umfrage: Wer hat den Hugs ausprobiert? Ausdrücke und Werte Datentypen Funktionen Aufgabe für diese Woche Programmieren

Mehr

Was bisher geschah Funktionale Programmierung in Haskell: Algebraische Datentypen Pattern Matching Polymorphie Typklassen Rekursive Datentypen:

Was bisher geschah Funktionale Programmierung in Haskell: Algebraische Datentypen Pattern Matching Polymorphie Typklassen Rekursive Datentypen: Was bisher geschah Funktionale Programmierung in Haskell: Algebraische Datentypen Pattern Matching Polymorphie Typklassen Rekursive Datentypen: Peano-Zahlen, Listen, Bäume Rekursive Funktionen strukturelle

Mehr

Teillösung zum 7.Aufgabenblatt zur Vorlesung Informatik A

Teillösung zum 7.Aufgabenblatt zur Vorlesung Informatik A 1 Teillösung zum 7.Aufgabenblatt zur Vorlesung Informatik A (Autor: Florian Brinkmeyer) 1 Pascalsches Dreieck Implementieren Sie die Rekursion zur Berechnung der Binomialkoezienten. Geben Sie die ersten

Mehr

Kapitel 3: Eine einfache Programmiersprache. Programmieren in Haskell 1

Kapitel 3: Eine einfache Programmiersprache. Programmieren in Haskell 1 Kapitel 3: Eine einfache Programmiersprache Programmieren in Haskell 1 Datentypen, Datentypdefinitionen data Instrument = Oboe HonkyTonkPiano Cello VoiceAahs data Musik = Note Ton Dauer Pause Dauer Musik

Mehr

Die Korrektheit von Mergesort

Die Korrektheit von Mergesort Die Korrektheit von Mergesort Christoph Lüth 11. November 2002 Definition von Mergesort Die Funktion Mergesort ist wie folgt definiert: msort :: [Int]-> [Int] msort xs length xs

Mehr

Einführung in die Informatik 2

Einführung in die Informatik 2 Technische Universität München Fakultät für Informatik Prof. Tobias Nipkow, Ph.D. Lars Noschinski, Dr. Jasmin Blanchette, Dmitriy Traytel Wintersemester 2012/13 Lösungsblatt Endklausur 9. Februar 2013

Mehr

Funktionen höherer Ordnung

Funktionen höherer Ordnung Eine Funktion wird als Funktion höherer Ordnung bezeichnet, wenn Funktionen als Argumente verwendet werden, oder wenn eine Funktion als Ergebnis zurück gegeben wird. Beispiel: twotimes :: ( a -> a ) ->

Mehr

ProInformatik: Funktionale Programmierung. Punkte

ProInformatik: Funktionale Programmierung. Punkte ProInformatik: Funktionale Programmierung 27.7-22.8.2008, M. Knobelsdorf Probeklausur Ihre persönliche Klausurnummer: Vorname, Nachname: Aufgabe 1 2 3 4 5 6 7 8 Punkte 12 4 4 4 4 2 4 6 40 Erz. Punkte Zum

Mehr

Grundlegende Datentypen

Grundlegende Datentypen Grundlegende Datentypen (Funktionale Programmierung) Prof. Dr. Oliver Braun Letzte Änderung: 18.03.2018 21:08 Grundlegende Datentypen 1/16 Typen in Haskell ist alles streng typisiert Haskell verfügt über

Mehr

Ströme als unendliche Listen in Haskell

Ströme als unendliche Listen in Haskell Ströme als unendliche Listen in Haskell Strom := Folge oder Liste von Daten, unbegrenzt viele Daten-Elemente. Ströme sind in Haskell als als (potentiell) unendliche Listen darstellbar und programmierbar

Mehr

Grundlegende Datentypen

Grundlegende Datentypen Grundlegende Datentypen Funktionale Programmierung Prof. Dr. Oliver Braun Letzte Änderung: 22.10.2018 10:53 Grundlegende Datentypen 1/21 Typen in Haskell ist alles streng typisiert Haskell verfügt über

Mehr

Grundlegende Datentypen

Grundlegende Datentypen Funktionale Programmierung Grundlegende Datentypen Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 14.11.2017 15:37 Inhaltsverzeichnis Typen........................................

Mehr

Prüfung Funktionale Programmierung

Prüfung Funktionale Programmierung Hochschule für angewandte Wissenschaften München Fakultät für Informatik und Mathematik Studiengruppe IF, IB, IC Sommersemester 2015 Prüfung Funktionale Programmierung Datum : 23.07.2015, 10:30 Uhr Bearbeitungszeit

Mehr

Informatik A WS 2007/08. Nachklausur

Informatik A WS 2007/08. Nachklausur Informatik A WS 2007/08 Nachklausur 18.04.2008 Name:.............................. Matrikelnummer:.................. Tutor:.................. Bitte Zutreffendes ankreuzen: Hauptfach Bioinformatik Hauptfach

Mehr

HASKELL KAPITEL 2.1. Notationen: Currying und das Lambda-Kalkül

HASKELL KAPITEL 2.1. Notationen: Currying und das Lambda-Kalkül HASKELL KAPITEL 2.1 Notationen: Currying und das Lambda-Kalkül Bisheriges (Ende VL-Teil 1) weite :: (Float,Float) ->Float weite (v0, phi) = (square(v0)/9.81) * sin(2 * phi) (10, 30 ) smaller ::(Integer,

Mehr

Funktionale Programmierung Grundlegende Datentypen

Funktionale Programmierung Grundlegende Datentypen Grundlegende Datentypen Prof. Dr. Oliver Braun Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 06.11.2017 16:45 Inhaltsverzeichnis Typen........................................

Mehr

Funktionale Programmierung ALP I. Funktionen höherer Ordnung. Teil 2 SS 2013. Prof. Dr. Margarita Esponda. Prof. Dr.

Funktionale Programmierung ALP I. Funktionen höherer Ordnung. Teil 2 SS 2013. Prof. Dr. Margarita Esponda. Prof. Dr. ALP I Funktionen höherer Ordnung Teil 2 SS 2013 Funktionen höherer Ordnung Nehmen wir an, wir möchten alle Zahlen innerhalb einer Liste miteinander addieren addall:: (Num a) => [a -> a addall [ = 0 addall

Mehr

So schreiben Sie ein Parser-Programm

So schreiben Sie ein Parser-Programm Universität des Saarlandes Fachrichtung Informatik Programming Systems Lab Prof. Gert Smolka Proseminar Programmiersysteme WS 03/04 Höhere Funktionale Programmierung: Parser-Kombinatoren Matthias Berg

Mehr

WS 2012/2013. Robert Giegerich. 21. November 2012

WS 2012/2013. Robert Giegerich. 21. November 2012 WS 2012/2013 Robert AG Praktische Informatik 21. November 2012 Funktionen als Bürger erster Klasse Funktionen definieren kann man in jeder Programmiersprache. Eine funktionalen Programmiersprache erlaubt

Mehr

Programmieren in Haskell

Programmieren in Haskell Programmieren in Haskell Syntax und Semantik von Haskell Programmieren in Haskell 1 Was wir heute (und nächstes mal) machen Datentypdefinitionen Wertdefinitionen, Variablenbindungen Musterbindungen Funktionsbindungen

Mehr

Beweis durch vollständige Induktion

Beweis durch vollständige Induktion Skriptteil zur Vorlesung: Proinformatik - Funktionale Programmierung Dr. Marco Block-Berlitz 4.Juli 009 Beweis durch vollständige Induktion Die fünf Peano-Axiome Grundlage für die vollständige Induktion

Mehr

Einführung in die funktionale Programmierung

Einführung in die funktionale Programmierung Einführung in die funktionale Programmierung Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 26. Oktober 2006 Haskell - Einführung Syntax Typen Auswertung Programmierung

Mehr

Programmieren in Haskell

Programmieren in Haskell Programmieren in Haskell Wir steigen ein... Programmieren in Haskell 1 Was wir heute machen Umfrage: Wer hat den Hugs ausprobiert? Ausdrücke und Werte Datentypen Funktionen Aufgabe für s Wochenende Programmieren

Mehr

Paradigmen der Programmierung

Paradigmen der Programmierung SS 11 Prüfungsklausur 25.07.2011 Aufgabe 5 (6+9 = 15 Punkte) a) Bestimmen Sie jeweils den Typ der folgenden Haskell-Ausdrücke: ( 1, 2 :"3", 4 < 5) :: (Char, String, Bool) [(last, tail), (head, take 5)]

Mehr

Grundlagen der Programmierung 2 (2.B)

Grundlagen der Programmierung 2 (2.B) Grundlagen der Programmierung 2 (2.B) Prof. Dr. Manfred Schmidt-Schauß Künstliche Intelligenz und Softwaretechnologie 5. Mai 2010 Listenausdrücke, Listen-Komprehensionen; (list comprehensions) Analog zu

Mehr

Gliederung. Algorithmen und Datenstrukturen I. Listen in Haskell: Listen in Haskell: Listen in Haskell. Datentyp Liste Strings Listenkomprehension

Gliederung. Algorithmen und Datenstrukturen I. Listen in Haskell: Listen in Haskell: Listen in Haskell. Datentyp Liste Strings Listenkomprehension Gliederung Algorithmen und Datenstrukturen I D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg 1 Winter 2009/10, 16. Oktober 2009, c

Mehr

Programmieren in Haskell

Programmieren in Haskell Programmieren in Haskell Syntax und Semantik von Haskell Programmieren in Haskell 1 Was wir heute (und nächstes mal) machen Datentypdefinitionen Wertdefinitionen, Variablenbindungen Musterbindungen Funktionsbindungen

Mehr

Grundlagen der Programmierung 2 B

Grundlagen der Programmierung 2 B Grundlagen der Programmierung 2 B Haskell: Listen-Komprehensionen Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2017 Listenausdrücke, Listen-Komprehensionen Analog zu Mengenausdrücken, aber Reihenfolge

Mehr

Funktionale Programmierung. ALP I Lambda-Kalkül. Teil III SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Funktionale Programmierung. ALP I Lambda-Kalkül. Teil III SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda ALP I Lambda-Kalkül Teil III SS 2011 Parser Hilfsfunktionen: Die break-funktion ist eine Funktion Höherer Ordnung, die eine Liste beim ersten Vorkommen einer Bedingung in zwei Listen spaltet. break ::

Mehr

Musterlösung zur 2. Aufgabe der 4. Übung

Musterlösung zur 2. Aufgabe der 4. Übung Musterlösung zur 2. Aufgabe der 4. Übung Da viele von Euch anscheinend noch Probleme mit dem Entfalten haben, gibt es für diese Aufgabe eine Beispiellösung von uns. Als erstes wollen wir uns noch einmal

Mehr

Prüfung Funktionale Programmierung

Prüfung Funktionale Programmierung Hochschule für angewandte Wissenschaften München Fakultät für Informatik und Mathematik Studiengruppe IF, IB, IC Sommersemester 2014 Prüfung Funktionale Programmierung Datum : 16.07.2014, 12:30 Uhr Bearbeitungszeit

Mehr

Tutoraufgabe 1 (Auswertungsstrategie):

Tutoraufgabe 1 (Auswertungsstrategie): Prof. aa Dr. J. Giesl Programmierung WS12/13 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder Tutoraufgabe 1 (Auswertungsstrategie): Gegeben sei das folgende Haskell-Programm: absteigend :: Int - > [ Int

Mehr

Grundlagen der Programmierung 2 (2.B)

Grundlagen der Programmierung 2 (2.B) Grundlagen der Programmierung 2 (2.B) Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 11. Juni 2008 Reduktionsregel zum case case-reduktion (case (c t 1... t n ) of... (c

Mehr

Einführung in die Informatik 2

Einführung in die Informatik 2 Technische Universität München Fakultät für Informatik Prof. Tobias Nipkow, Ph.D. Manuel Eberl, Lars Hupel, Lars Noschinski Wintersemester 2014/15 Lösungsblatt Endklausur 13. Februar 2015 Einführung in

Mehr

Praktische Informatik 3: Funktionale Programmierung Vorlesung 5 vom : Funktionen Höherer Ordnung I

Praktische Informatik 3: Funktionale Programmierung Vorlesung 5 vom : Funktionen Höherer Ordnung I Rev. 2766 1 [33] Praktische Informatik 3: Funktionale Programmierung Vorlesung 5 vom 11.11.2014: Funktionen Höherer Ordnung I Christoph Lüth Universität Bremen Wintersemester 2014/15 2 [33] Fahrplan Teil

Mehr

Programmieren in Haskell Programmiermethodik

Programmieren in Haskell Programmiermethodik Programmieren in Haskell Programmiermethodik Peter Steffen Universität Bielefeld Technische Fakultät 12.01.2011 1 Programmieren in Haskell Bisherige Themen Was soll wiederholt werden? Bedienung von hugs

Mehr

Hausaufgaben. zur Vorlesung. Vollständige Induktion. 1. Beweist folgende Formeln (zu beweisen ist nur die Gleichheit mit dem. i=1 (4 + i)!

Hausaufgaben. zur Vorlesung. Vollständige Induktion. 1. Beweist folgende Formeln (zu beweisen ist nur die Gleichheit mit dem. i=1 (4 + i)! WS 015/1 Hausaufgaben zur Vorlesung Vollständige Induktion 1. Beweist folgende Formeln zu beweisen ist nur die Gleichheit mit dem! -Zeichen : a 5 + + 7 + 8 + + 4 + n n 4 + i! nn+9 b 1 + + 9 + + n 1 n 1

Mehr

Programmieren in Haskell Einführung

Programmieren in Haskell Einführung Programmieren in Haskell Einführung Peter Steffen Universität Bielefeld Technische Fakultät 17.10.2008 1 Programmieren in Haskell Veranstalter Dr. Peter Steffen Raum: M3-124 Tel.: 0521/106-2906 Email:

Mehr

Fahrplan. Inhalt. Ähnliche Funktionen der letzten Vorlesung. Muster der primitiven Rekursion. Ähnliche Funktionen der letzten Vorlesung

Fahrplan. Inhalt. Ähnliche Funktionen der letzten Vorlesung. Muster der primitiven Rekursion. Ähnliche Funktionen der letzten Vorlesung Fahrplan Teil I: Funktionale Programmierung im Kleinen Praktische Informatik 3: Funktionale Programmierung Vorlesung 5 vom 11.11.2014: Funktionen Höherer Ordnung I Christoph Lüth Universität Bremen Wintersemester

Mehr

WS 2013/2014. Robert Giegerich. 11. Dezember 2013

WS 2013/2014. Robert Giegerich. 11. Dezember 2013 WS 2013/2014 Robert AG Praktische Informatik 11. Dezember 2013 höherer Ordnung Worum geht es heute? In Haskell gibt es, die als Argument haben oder als Ergebnis liefern. Diese nennt man höherer Ordnung.

Mehr

Funktionale Programmierung und Typtheorie

Funktionale Programmierung und Typtheorie Funktionale Programmierung und Typtheorie 5. Fortgeschrittene Konzepte 5.1 Komprehensionen 5.2 Partielle Applikationen 5.3 Strikte und nichtstrikte Funktionen 5.4 Unendliche Datenstrukturen und verzögerte

Mehr

Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom : Typvariablen und Polymorphie

Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom : Typvariablen und Polymorphie Rev. 2749 1 [28] Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom 04.11.2014: Typvariablen und Polymorphie Christoph Lüth Universität Bremen Wintersemester 2014/15 2 [28] Fahrplan Teil

Mehr

Einführung in Haskell

Einführung in Haskell Einführung in Haskell Axel Stronzik 21. April 2008 1 / 43 Inhaltsverzeichnis 1 Allgemeines 2 / 43 Inhaltsverzeichnis 1 Allgemeines 2 Funktions- und Typdefinitionen 2 / 43 Inhaltsverzeichnis 1 Allgemeines

Mehr

Frage, Fragen und nochmals Fragen

Frage, Fragen und nochmals Fragen Frage, Fragen und nochmals Fragen Berthold Hoffmann Universität Bremen and DFKI Bremen hof@informatik.uni-bremen.de In diesem Text stehen einige Fragen, die man sich zu den Folien der Veranstaltung Funktionales

Mehr

Grundlagen der Programmierung 2. Unendliche Listen und Ströme(B)

Grundlagen der Programmierung 2. Unendliche Listen und Ströme(B) Grundlagen der Programmierung 2 Unendliche Listen und Ströme(B) Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 17. Mai 2006 Beispiel: scanl, scanr scanl berechnet das foldl

Mehr

Praktische Informatik 3: Funktionale Programmierung Vorlesung 5 vom : Funktionen Höherer Ordnung I

Praktische Informatik 3: Funktionale Programmierung Vorlesung 5 vom : Funktionen Höherer Ordnung I 16:02:05 2017-01-17 1 [38] Praktische Informatik 3: Funktionale Programmierung Vorlesung 5 vom 15.11.2016: Funktionen Höherer Ordnung I Christoph Lüth Universität Bremen Wintersemester 2016/17 PI3 WS 16/17

Mehr

Programmieren in Haskell

Programmieren in Haskell Programmieren in Haskell Programmiermethodik Programmieren in Haskell 1 Was wir heute machen Spezifikation Strukturelle Rekursion Strukturelle Induktion Programmieren in Haskell 2 Spezifikation sort [8,

Mehr

Einführung in die Informatik 2

Einführung in die Informatik 2 Technische Universität München Fakultät für Informatik Prof. Tobias Nipkow, Ph.D. Lars Hupel, Lars Noschinski, Dr. Jasmin Blanchette Wintersemester 2013/14 Abschlussklausur 21. Februar 2014 Einführung

Mehr

Tutoraufgabe 1 (Auswertungsstrategie):

Tutoraufgabe 1 (Auswertungsstrategie): Prof. aa Dr. M. Müller C. Aschermann, J. Hensel, J. Protze, P. Reble Allgemeine ˆ Die Hausaufgaben sollen in Gruppen von je 3 Studierenden aus der gleichen Kleingruppenübung (Tutorium) bearbeitet werden.

Mehr

WS 2013/2014. Robert Giegerich. 11. Dezember 2013

WS 2013/2014. Robert Giegerich. 11. Dezember 2013 WS 2013/2014 Robert AG Praktische Informatik 11. Dezember 2013 höherer Ordnung Worum geht es heute? In Haskell gibt es, die als Argument haben oder als Ergebnis liefern. Diese nennt man höherer Ordnung.

Mehr

Funktionale Programmierung Mehr funktionale Muster

Funktionale Programmierung Mehr funktionale Muster Mehr funktionale Muster Prof. Dr. Oliver Braun Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 07.12.2017 06:56 Inhaltsverzeichnis Pattern Matching..................................

Mehr

: Funktionen höherer Ordnung. III.6 Funktionale Programmiertechniken - 1 -

: Funktionen höherer Ordnung. III.6 Funktionale Programmiertechniken - 1 - . Prinzipien der funktionalen Programmierung 2. Deklarationen 3. Ausdrücke 4. Muster (Patterns) 5. Typen und Datenstrukturen 6. Funktionale Programmiertechniken : Funktionen höherer Ordnung III.6 Funktionale

Mehr

1 Übersicht Induktion

1 Übersicht Induktion Universität Koblenz-Landau FB 4 Informatik Prof. Dr. Viorica Sofronie-Stokkermans Dipl.-Inform. Markus Bender 0.11.01 (v1.3) 1 Übersicht Induktion 1.1 Allgemeines Unter einem induktiven Vorgehen versteht

Mehr

ALP I. Funktionale Programmierung

ALP I. Funktionale Programmierung ALP I Funktionale Programmierung Zusammengesetzte Datentypen in Haskell WS 2012/2013 Zusammengesetzte Datentypen Tupel List String Zusammengesetzte Datentypen Tupel-Datentyp Ein Tupel ist eine Ansammlung

Mehr

13 Berechenbarkeit und Aufwandsabschätzung

13 Berechenbarkeit und Aufwandsabschätzung 13 Berechenbarkeit und Aufwandsabschätzung 13.1 Berechenbarkeit Frage: Gibt es für jede Funktion, die mathematisch spezifiziert werden kann, ein Programm, das diese Funktion berechnet? Antwort: Nein! [Turing

Mehr

Listen und Listenfunktionen. Grundlagen der Programmierung 2 A (Listen) Listen und Listenfunktionen. Listen? Haskell: Listen

Listen und Listenfunktionen. Grundlagen der Programmierung 2 A (Listen) Listen und Listenfunktionen. Listen? Haskell: Listen Listen und Listenfunktionen Grundlagen der Programmierung 2 A (Listen) Haskell: Listen Prof. Dr. Manfred Schmidt-Schauß Listen modellieren Folgen von gleichartigen, gleichgetypten Objekten. Ausdruck im

Mehr

Monoide. Funktionale Programmierung. Prof. Dr. Oliver Braun Letzte Änderung: :54. Monoide 1/16

Monoide. Funktionale Programmierung. Prof. Dr. Oliver Braun Letzte Änderung: :54. Monoide 1/16 Monoide Funktionale Programmierung Prof. Dr. Oliver Braun Letzte Änderung: 09.10.2018 06:54 Monoide 1/16 Abstraktion gleichartige Strukturen sollten abstrahiert werden Beispiel: Collections in Haskell

Mehr

Programmierung und Modellierung mit Haskell

Programmierung und Modellierung mit Haskell Funktionen höherer Ordnung Elementare HO-Funktionen Programmierung und Modellierung mit Haskell Funktionen höherer Ordnung Martin Hofmann Steffen Jost LFE Theoretische Informatik, Institut für Informatik,

Mehr

Einführung in die Informatik 2 5. Übung

Einführung in die Informatik 2 5. Übung Technische Universität München WS 2014/15 Institut für Informatik 07.11.2014 Prof. Tobias Nipkow, Ph.D. Abgabe: 14.11.2014 L. Noschinski, L. Hupel, Dr. J. Blanchette, M. Eberl Einführung in die Informatik

Mehr

Programmieren in Haskell Das Haskell Typsystem

Programmieren in Haskell Das Haskell Typsystem Programmieren in Haskell Das Haskell Typsystem Peter Steffen Robert Giegerich Universität Bielefeld Technische Fakultät 22.01.2010 1 Programmieren in Haskell Belauscht... Lisa Lista: Ohne Typen keine korrekten

Mehr

Lösung: InfA - Übungsblatt 07

Lösung: InfA - Übungsblatt 07 Lösung: InfA - Übungsblatt 07 Michele Ritschel & Marcel Schilling 23. Dezember 2008 Verwendete Abkürzungen: Beweis, vollständige Induktion, IA: Induktionsanfang/Induktionsanker, IS: Induktionsschritt/Induktionssprung,

Mehr

Unendliche Listen und Bäume

Unendliche Listen und Bäume Funktionale Programmierung Unendliche Listen und Bäume Helga Karafiat, Steffen Rüther Übersicht Grundlage: Lazy Evaluation Konstruktion von unendlichen Strukturen Verwendung von unendlichen Listen Unendliche

Mehr

Grundlagen der Programmierung 2 A (Listen)

Grundlagen der Programmierung 2 A (Listen) Grundlagen der Programmierung 2 A (Listen) Haskell: Listen Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2017 Listen und Listenfunktionen Listen modellieren Folgen von gleichartigen, gleichgetypten Objekten.

Mehr

Funktionale Programmierung. Monoide. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

Funktionale Programmierung. Monoide. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München Funktionale Programmierung Monoide Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 03.12.2018 07:53 Inhaltsverzeichnis Abstraktion..................................... 1 Eine

Mehr

Einführung in die Informatik 2 2. Übung

Einführung in die Informatik 2 2. Übung Technische Universität München WS 2014/15 Institut für Informatik 17.10.2014 Prof. Tobias Nipkow, Ph.D. Abgabe: 24.10.2014 L. Noschinski, L. Hupel, Dr. J. Blanchette, M. Eberl Einführung in die Informatik

Mehr

Funktionale Programmierung. Das Funktionale Quiz. Das Funktionale Quiz. Das Funktionale Quiz

Funktionale Programmierung. Das Funktionale Quiz. Das Funktionale Quiz. Das Funktionale Quiz Funktionale Programmierung Das Funktionale Quiz 31.5.2005 Nenne eine Gemeinsamkeit zwischen Typklassen und OO-Klassen Das Funktionale Quiz Das Funktionale Quiz Nenne einen Unterschied zwischen Typklassen

Mehr

WS 2011/2012. Robert Giegerich. October 17, 2012

WS 2011/2012. Robert Giegerich. October 17, 2012 in in WS 2011/2012 Robert AG Praktische Informatik October 17, 2012 Sprechstunden in GZI-Arbeitsraum (V2-240) Tutoren-Sprechstunden (V2-228) http://www.techfak.uni-bielefeld.de/ags/pi/ lehre/audiws12/#ueb

Mehr

Programmierparadigmen

Programmierparadigmen in Haskell Programmierparadigmen in Haskell D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Sommer 2011, 4. April 2011, c 2011 D.Rösner

Mehr

Grundprinzipien der funktionalen Programmierung

Grundprinzipien der funktionalen Programmierung Grundprinzipien der funktionalen Programmierung Funktionen haben keine Seiteneffekte Eine Funktion berechnet einen Ausgabewert der nur von den Eingabewerten abhängt: 12 inputs + output 46 34 2 Nicht nur

Mehr

Definieren Sie eine Funktion circlearea zur Berechnung der Fläche eines Kreises mit gegebenen Radius (Float).

Definieren Sie eine Funktion circlearea zur Berechnung der Fläche eines Kreises mit gegebenen Radius (Float). Haskell Funktionen Definieren Sie eine Funktion circlearea zur Berechnung der Fläche eines Kreises mit gegebenen Radius (Float). circlearea :: Float -> Float circlearea radius = 2 * pi * radius^2 Definieren

Mehr

Typklassen. Natascha Widder

Typklassen. Natascha Widder Typklassen Natascha Widder 19.11.2007 Motivation Typklassen fassen Typen mit ähnlichen Operatoren zusammen ermöglichen überladenen Funktionen Definition Typklassen Deklarationsschema class Name Platzhalter

Mehr

Grundlagen der Programmierung 2 (2.A)

Grundlagen der Programmierung 2 (2.A) Grundlagen der Programmierung 2 (2.A) Prof. Dr. Manfred Schmidt-Schauß Künstliche Intelligenz und Softwaretechnologie 5. Mai 2011 Listen und Listenfunktionen Listen modellieren Folgen von gleichartigen,

Mehr

Crashkurs Haskell Mentoring WiSe 2016/17. Anja Wolffgramm Freie Universität Berlin

Crashkurs Haskell Mentoring WiSe 2016/17. Anja Wolffgramm Freie Universität Berlin Crashkurs Haskell Mentoring WiSe 2016/17 Anja Wolffgramm Freie Universität Berlin 02/11/2016 , Inhalt Kommandozeile Haskell installieren & starten Ein 1. Haskell-Programm Funktionsdefinition Primitive

Mehr

Funktionale Programmierung mit Haskell. Jan Hermanns

Funktionale Programmierung mit Haskell. Jan Hermanns Funktionale Programmierung mit Haskell Jan Hermanns 1 Programmiersprachen imperativ deklarativ konventionell OO logisch funktional Fortran Smalltalk Prolog Lisp C Eiffel ML Pascal Java Haskell 2 von Neumann

Mehr

Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell):

Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell): Was bisher geschah deklarative Programmierung funktional: Programm: Menge von Termgleichungen, Term Auswertung: Pattern matsching, Termumformungen logisch: Programm: Menge von Regeln (Horn-Formeln), Formel

Mehr

WS 2011/2012. Georg Sauthoff November 2011

WS 2011/2012. Georg Sauthoff November 2011 WS 2011/2012 Georg 1 AG Praktische Informatik 22. November 2011 1 gsauthof@techfak.uni-bielefeld.de Vorstellung der abgaben aus den Tutorien. Sieb-Beispiel Siehe Tafel (Auswertungsbeispiel) Sieb-Beispiel

Mehr

Theorembeweiserpraktikum SS 2016

Theorembeweiserpraktikum SS 2016 Institut für Programmstrukturen und Datenorganisation Lehrstuhl Programmierparadigmen Am Fasanengarten 5 76131 Karlsruhe http://pp.ipd.kit.edu/ Theorembeweiserpraktikum SS 2016 http://pp.ipd.kit.edu/lehre/ss2016/tba

Mehr

Aufgabe 1 Basiswissen zur Vorlesung (8 Punkte)

Aufgabe 1 Basiswissen zur Vorlesung (8 Punkte) Matrikelnummer: 1 Aufgabe 1 Basiswissen zur Vorlesung (8 Punkte) Kreuzen Sie an, ob die folgenden Aussagen richtig oder falsch sind. Bewertung: keine Antwort: 0 Punkte richtige Antwort: +0.5 Punkte falsche

Mehr

1 - FortProg ist: [ ] objekt-orientiert; [ ] funktional; [ ] logisch; [ ] manchmal nicht auszuhalten

1 - FortProg ist: [ ] objekt-orientiert; [ ] funktional; [ ] logisch; [ ] manchmal nicht auszuhalten 1 - FortProg ist: [ ] objekt-orientiert; [ ] funktional; [ ] logisch; [ ] manchmal nicht auszuhalten Java-1. a), e) Java-2. --- gestrichen --- Java-3. keine Antwort ist richtig Java-4. a) Java-5. a), b)

Mehr

Programmieren in Haskell Abstrakte Datentypen

Programmieren in Haskell Abstrakte Datentypen Programmieren in Haskell Abstrakte Datentypen Peter Steffen Universität Bielefeld Technische Fakultät 09.01.2009 1 Programmieren in Haskell Einführung Man unterscheidet zwei Arten von Datentypen: konkrete

Mehr

Programmierung WS18/19 Übungsblatt 9 (Abgabe Freitag, den um 12 Uhr)

Programmierung WS18/19 Übungsblatt 9 (Abgabe Freitag, den um 12 Uhr) Prof. aa Dr. J. Giesl S. Dollase, M. Hark, D. Korzeniewski Aufgabe 2 (Datenstrukturen in Haskell): (2 + 1 + 2 + 2.5 + 3.5 = 11 Punkte) In dieser Aufgabe geht es darum, arithmetische Ausdrücke auszuwerten.

Mehr

Funktionale Programmierung. ALP I Lambda-Kalkül. Teil IVb WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Funktionale Programmierung. ALP I Lambda-Kalkül. Teil IVb WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda ALP I Lambda-Kalkül Teil IVb WS 2012/2013 λ-kalkül-parser Hilfsfunktionen: Die break-funktion ist eine Funktion höherer Ordnung, die eine Liste beim ersten Vorkommen einer Bedingung in zwei Listen spaltet.

Mehr

Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom : Typvariablen und Polymorphie

Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom : Typvariablen und Polymorphie 16:02:01 2017-01-17 1 [37] Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom 08.11.2016: Typvariablen und Polymorphie Christoph Lüth Universität Bremen Wintersemester 2016/17 PI3 WS 16/17

Mehr

WS 2011/2012. Georg Sauthoff 1. October 18, 2011

WS 2011/2012. Georg Sauthoff 1. October 18, 2011 in in WS 2011/2012 Georg 1 AG Praktische Informatik October 18, 2011 1 gsauthof@techfak.uni-bielefeld.de Neue Übungsgruppen in neue Übungsgruppen neue Tutoren Sprechstunden in GZI-Arbeitsraum (V2-240)

Mehr

ALP I Induktion und Rekursion

ALP I Induktion und Rekursion ALP I Induktion und Rekursion WS 2012/2013 Vollständige Induktion (Mafi I) Die Vollständige Induktion ist eine mathematische Beweistechnik, die auf die Menge der natürlichen Zahlen spezialisiert ist. Vorgehensweise:

Mehr

Programmierung und Modellierung mit Haskell

Programmierung und Modellierung mit Haskell Programmierung und Modellierung mit Haskell Teil 6: Funktionen höherer Ordnung Steffen Jost LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität, München 14. Mai 2018 Steffen

Mehr