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

Größe: px
Ab Seite anzeigen:

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

Transkript

1 Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zur Übungsklausur - Punkte: A1: 30, A2: 20, A3: 20, A4: 20, A5: 10, A6: 20 Punkte: / Hinweis: Geben Sie bei allen verwendeten Funktionen die Signaturen an. Viel Erfolg! 1 Haskell-la-vista! ( =30 Punkte) 1.1 Funktionen höherer Ordnung (10 Teilpunkte) Schreiben Sie unter Verwendung der map und foldr Funktionen eine Funktion sumquad, die bei Eingabe eines ganzzahligen positiven Werts n, die Summe aller Quadratzahlen von 1 bis n berechnet. sumquad :: Integer -> Integer sumquad n (n >= 0) = foldr (+) 0 (map (^2) [1..n]) otherwise = error "wrong input!" 1

2 1.2 Klassen + Instanzen (10 Teilpunkte) Seien zwei verschiedene algebraische Datentypen, einer für die Darstellung der natürlichen Zahlen (N) und einer für die Darstellung der ganzen Zahlen (Z) gegeben: data N = Zero S (N) deriving (Show) data Z = Z (N,N) deriving (Show) Erklärung: Wenn a die Zahl x darstellt und b die Zahl y darstellt, dann stellt Z (a,b) die Zahl x y dar. Beispiele: Mit dem Datentyp N kann man Zahlen wie folgt darstellen: 3 = S(S(S(Zero))) 7 = S(S(S(S(S(S(S(Zero))))))) Mit dem Datentyp Z kann man Zahlen wie folgt darstellen: 3 = ( S(S(S(Zero))), Zero ) 3 = ( S(S(S(S(Zero)))), S(Zero) ) -2 = ( Zero, S(S(Zero)) ) -2 = ( S(S(Zero)), S(S(S(S(Zero)))) ) Schreiben Sie die Typ-Klasse Rechnen, die Ihnen die Operation Addition bereitstellt und implementieren Sie jeweils eine Instanz für jeden algebraischen Datentypen. class Rechnen a add::a -> a -> a instance Rechnen N add::n -> N -> N add Zero y = y add S(x) y = add x S(y) instance Rechnen Z add::z -> Z -> Z add (Z (a,b)) (Z (x,y)) = Z ((add a x),(add b y)) 2

3 1.3 Typ-Inferenz (10 Teilpunkte) Es seien folgende Funktionssignaturen bekannt. map :: (a -> b) -> [a] -> [b] sum :: (Num a) => [a] -> a length :: [a] -> Int show :: (Show a) => a -> String Bestimmen Sie den Typ der Funktionen: f = sum. map sum g = map (show. length) f :: (Num a) => [[a]] -> a Erklärung zu f: 01) map hat den Typ (a -> b) -> [a] -> [b] 02) sum hat den Typ Num c => [c] -> c 03) sum hat den Typ Num d => [d] -> d 04) sum hat den Typ a -> b, weil es das erste Argument von map ist 05) a = Num d => [d], wegen 03) und 04) 06) b = Num d => d, wegen 03) und 04) 07) x hat den Typ [a] = 05) Num d => [[d]], weil es das zweite Argument von map ist 08) (map length x) hat den Typ [b] = 06) Num d => [d], wegen 01) 09) (map length x) hat den Typ Num c => [c], weil es das erste Argument von sum ist 10) c = d, wegen 08) und 09) 11) sum (map length x) hat den Typ Num d => d, wegen 02) und 10) Aus 07) und 11) folgt, dass (sum. map length) den Typ Num d => [[d]] -> d hat. g :: [[a]] -> [String] Um den Typ von map (show. length) zu bestimmen, schauen wir zuerst, was der Typ von show. length ist. Nach Denition von (.) gilt: (show. length) x = show (length x) Erklärung zu g: 01) show hat den Typ Show a => a -> String 02) length hat den Typ [b] -> Int 03) x hat den Typ [b], weil es das erste Argument von length ist 04) (length x) hat den Typ Int, wegen 02) 05) (length x) hat den Typ Show a => a, weil es das erste Argument von show ist 06) show (length x) hat den Typ String, wegen 01) 07) (show. length) hat den Typ [b] -> String, wegen 03) und 06) Nun können wir den Typ von map (show. length) bestimmen: 08) map hat den Typ (c -> d) -> [c] -> [d] 09) (show. length) hat den Typ c -> d, weil es das erste Argument von map ist 10) c = [b], wegen 07) und 09) 11) d = String, wegen 07) und 09) Aus 08), 10) und 11) folgt, dass map (show. length) den Typ [[b]] -> [String] hat. 3

4 2 Datenbank (20 Punkte) Schreiben Sie ein Modul SimpleDB, das einen algebraischen Datentyp Datenbank verwendet um eine einfache Datenbank zu simulieren. Eine Datenbank ist eine Liste von 2-Tupeln. Jedes dieser 2- Tupel hat die Form: (key, [value 1, value 2,..., value n ]), wobei n 1 und jeder Schlüssel einzigartig sein muss (Primärschlüssel). Überlegen Sie sich geeignete Typklassen für die Typen der Schlüssel und der Werte. Es sollen folgende Funktionen implementiert werden: create Erzeugt eine leere Datenbank. Der Rückgabewert ist eine Datenbank. select db key Diese Funktion gibt alle Wert zurück, die einem Schlüssel in einer Datenbank zugeordnet sind. Falls der Schlüssel nicht existiert wird eine leere Liste ausgegeben. Falls der Schlüssel existiert wird eine Liste mit allen Werten, die diesem Schlüssel zugeordnet sind, zurückgegeben. Der Rückgabewert ist eine Liste von Werten. update db key value Diese Funktion fügt einer Datenbank einen Schlüsseleintrag mit zugeordnetem Wert hinzu. Falls der Schlüssel existiert und der Wert noch nicht dem Schlüssel zugeordnet ist, wird der Wert dem Schlüssel zugeordnet. Falls der Schlüssel existiert und der Wert bereits dem Schlüssel zugeordnet ist, wird nichts verändert. Falls der Schlüssel nicht existiert wird dieser erzeugt und der Wert diesem zugeordnet. Der Rückgabewert ist eine Datenbank. drop db key value Diese Funktion löscht aus einer Datenbank einen Wert, der einem Schlüssel zugeordnet war. Falls der Schlüssel oder der Wert nicht existiert wird ein Fehler ausgegeben. Falls der Schlüssel existiert wird der Wert aus der Zuordnung zum Schlüssel entfernt. Falls der Schlüssel existiert und nur noch der angegebene Wert als einziger Wert dem Schlüssel zugeordnet ist, wird der Schlüssel ebenfalls aus der Datenbank entfernt. Der Rückgabewert ist eine Datenbank. Tipp: Hilfreiche Funktionen sind elem, takewhile, dropwhile und filter. 4

5 module SimpleDB (Datenbank, create, select, update, drop) -- Dieses Modul stellt eine ganz einfache Datenbank dar. data (Eq k, Eq v) => Datenbank k v = DB [(k,[v])] deriving (Show) create :: (Eq k, Eq v) => Datenbank k v select :: (Eq k, Eq v) => Datenbank k v -> k -> [v] update :: (Eq k, Eq v) => Datenbank k v -> k -> [v] -> Datenbank k v drop :: (Eq k, Eq v) => Datenbank k v -> k -> [v] -> Datenbank k v create = DB [] select (DB []) _ = [] select (DB ((key', values'):xs)) key (key' == key) = values' otherwise = select (DB xs) key update (DB xs) key values (iselement (DB xs) key) == False = error "Key existiert nicht!" otherwise = (DB (lokey ++ [(key, values)] ++ rokey)) lokey = (takewhile (\x -> (fst x) /= key) xs) rokey = (tail ((dropwhile (\x -> (fst x) /= key)) xs)) drop (DB xs) key values (iselement (DB xs) key) == False = error "Key existiert nicht!" otherwise = (DB (lokey ++ rokey)) lokey = (takewhile (\x -> (fst x) /= key) xs) rokey = (tail ((dropwhile (\x -> (fst x) /= key)) xs)) -- Diese Funktion kann nach dem Import des Moduls nicht direkt aufgerufen werden. -- Scope = private, da iselement nicht in der Exportliste aufgeführt ist. iselement :: (Eq k, Eq v) => Datenbank k v -> k -> Bool iselement (DB []) _ = False iselement (DB ((key',_):xs)) key = (key' == key) iselement (DB xs) key Eine andere nden Sie auf der Veranstaltungsseite. 5

6 3 Sortieren und Laufzeit (10+10=20 Punkte) 3.1 Sortieren durch Einfügen (10 Teilpunkte) Implementieren Sie den Insertion-Sort-Algorithmus. isort :: [Integer] -> [Integer] isort [] = [] isort (x:xs) = ins x (isort xs) ins :: Integer -> [Integer] -> [Integer] ins x [] = [x] ins x (y:ys) (x <= y) = (x:y:ys) otherwise = y:(ins x ys) 3.2 Laufzeit (10 Teilpunkte) Bestimmen Sie die Laufzeit Ihrer Implementierung. Es reicht wenn Sie die Laufzeit in O-Notation angeben und diese textuell begründen. Die Funktion isort hat eine Laufzeit von O(n 2 ). isort besteht aus zwei Teilen. Der erste Teil durchläuft alle Elemente der Liste, also n Elemente. Bei jedem Durchlauf wird der zweite Teil aufgerufen. Im zweiten Teil wird jedes Element mit dem Kopf der Restliste verglichen und sortiert eingefügt. Der zweite Teil vergleicht (n 1) Elemente miteinander. Zusammen ergibt das eine Laufzeit von n (n 1) = n 2 n O(n 2 ). 6

7 4 Strukturelle Induktion (10+10=20 Punkte) 4.1 Bäume (10 Teilpunkte) Sei folgender algebraischer Datentyp und folgende Gleichungen gegeben: data Baum = Blatt Int Knoten Baum Baum deriving (Show) -- wendet die Funktion f auf jedes Element des Baumes an maptree :: (Int -> Int) -> Baum -> Baum maptree f (Blatt x) = Blatt (f x) -- mapt.1 maptree f (Knoten lb rb) = Knoten (maptree f lb) (maptree f rb) -- mapt.2 Beweisen Sie mit struktureller Induktion folgende Behauptung: maptree id baum = id baum Es folgt ein Beweis mit struktureller Induktion über (die Tiefe des Baumes) t. zu zeigen: maptree id baum = id baum Induktionsbasis: t = 0, Baum = Blatt x maptree id Baum[t=0] d.h. maptree id (Blatt x) = id (Blatt x) <==> (Blatt (id x)) = id (Blatt x) -- mapt.1 <==> (Blatt x) = (Blatt x) Induktionsvoraussetzung: Sei die Behauptung wahr für alle DT vom Typ Baum der Tiefe t <= n. Induktionsbehauptung: Die Behauptung ist wahr für alle DT vom Typ Baum der Tiefe t <= n+1. Induktionsschritt: n -> n+1 maptree id Baum[t<=(n+1)] d.h. maptree id (Knoten lb rb) = id (Knoten lb rb) -- mapt.2 <==> (Knoten (maptree id lb) (maptree id rb)) = id (Knoten lb rb) -- nach IV <==> (Knoten (id lb) (id rb)) = id (Knoten lb rb) <==> (Knoten (lb) (rb)) = (Knoten lb rb) Es wurde mit struktureller Induktion gezeigt, dass die Behauptung gilt. 7

8 4.2 Listen (10 Teilpunkte) Seien folgende Gleichungen gegeben: ++.1 : [] ++ ys = ys ++.2 : (x:xs) ++ ys = x:(xs ++ ys) rev.1 : reverse [] = [] rev.2 : reverse (x:xs) = reverse xs ++ [x] rev.3 : reverse (xs ++ ys) = (reverse ys) ++ (reverse xs) Beweisen Sie mit struktureller Induktion folgende Behauptung: reverse (reverse xs) = xs Es folgt ein Beweis mit struktureller Induktion. Induktionsbasis: xs = [] reverse (reverse []) = [] rev.1 <==> reverse [] = [] rev.1 <==> [] = [] Induktionsvoraussetzung: Für eine Liste xs mit beliebiger, aber fester Länge gilt: reverse (reverse xs) = xs Induktionsbehauptung: Dann gilt auch: reverse (reverse (x:xs)) = (x:xs) Induktionsschritt: xs -> (x:xs) reverse (reverse (x:xs)) = (x:xs) rev.2 <==> reverse (reverse xs ++ [x]) = (x:xs) rev.3 <==> reverse [x] ++ reverse (reverse xs) = (x:xs) <==> reverse (x:[]) ++ reverse (reverse xs) = (x:xs) rev.2 <==> (reverse [] ++ [x]) ++ reverse (reverse xs) = (x:xs) rev.1 <==> ([] ++ [x]) ++ reverse (reverse xs) = (x:xs) ++.1 <==> [x] ++ reverse (reverse xs) = (x:xs) nach IV <==> [x] ++ xs = (x:xs) <==> x:[] ++ xs = (x:xs) ++.2 <==> x:([] ++ xs) = (x:xs) ++.1 <==> (x:xs) = (x:xs) Es wurde mit struktureller Induktion gezeigt, dass die Behauptung gilt. 8

9 5 Primitive Rekursion (10 Punkte) Rekursionsschema: R(0, x 1,..., x m ) = g(x 1,..., x m ) R(S(n), x 1,..., x m ) = h(r(n, x 1,..., x m ), n, x 1,..., x m ) Zeigen Sie, dass die Funktion isodd (Ein Prädikat, das prüft ob eine Zahl ungerade ist. Das Ergebnis ist 1 wenn die Zahl ungerade ist und 0 sonst.) primitiv-rekursiv ist. Sie dürfen nur die Grundfunktionen S und Z voraussetzen, das heiÿt, alle Funktion die Sie ansonsten für Ihren Beweis verwenden müssen Sie ebenfalls beweisen. not 0 = one not n = Z (not (n-1)) one = S Z isodd 0 = Z isodd n = not (isodd (n-1)) 6 λ - Kalkül (5+5+10=20 Punkte) 6.1 Freie und gebundene Ausdrücke (5 Teilpunkte) Bestimmen Sie die freien und gebundenen Variablen im folgenden Ausdruck und geben Sie diese explizit an. Benennen Sie die gebundenen Variablen so um, dass in jedem Ausdruck alle λ- Abstraktionen verschiedene Variablen binden. (λab.(λab.(λc.(λab.abc))ab(cc))(λab.a)(λac.c(c(a)))) (λab.(λde.(λc.(λfg.fgc))de(xx))(λhi.h)(λjk.k(k(j)))) Gebundene Variablen: a, b, c, d, e, f, g, h, i, j, k Freie Variablen: x 9

10 6.2 λ - Ausdruck reduzieren (5 Teilpunkte) (λa.a(λab.b)(λa.a(λab.b)(λab.a))(λab.b))(λab.ab) Es gibt 2 Möglichkeiten das Problem zu lösen: Elegante : Normale : Z 1 F {}}{{}}{{}}{ (λa.a (λab.b) (λa.a(λab.b)(λab.a)) (λab.b)) (λab.ab) = (λab.b) }{{}}{{}}{{} F F (λa.a(λab.b)(λa.a(λab.b)(λab.a))(λab.b))(λab.ab) = β (λab.ab)(λab.b)(λa.a(λab.b)(λab.a))(λab.b) = β (λb.(λab.b)b)(λa.a(λab.b)(λab.a))(λab.b) = β (λab.b)(λa.a(λab.b)(λab.a))(λab.b) = β (λb.b)(λab.b) = β (λab.b) F 6.3 λ - Ausdruck erstellen (10 Teilpunkte) Schreiben Sie einen λ - Ausdruck, der rekursiv die Quadrate aller natürlichen Zahlen von 0 bis n addiert. Sie können dabei die folgenden Funktionen als gegeben voraussetzen: A(Addition) M(Multiplikation) P(Vorgänger) Y(Fixpunktoperator) Z(Vergleich auf 0) sumquad :: Integer -> Integer sumquad = if n == 0 then 0 else (n*n) + sumquad (n-1) sumquad Y (λrn. (Zn) (0) (A(M(n)(n))(r(P n)))) }{{}}{{}}{{} if else then 10

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

Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 4 - 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 11.11.011 Ziele

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

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

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

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

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

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

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

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

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 Programmiermethodik Programmieren in Haskell 1 Was wir heute machen Spezifikation Strukturelle Rekursion Strukturelle Induktion Programmieren in Haskell 2 Spezifikation sort [8,

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

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

Programmieren in Haskell. Stefan Janssen. Strukturelle Rekursion. Universität Bielefeld AG Praktische Informatik. 10.

Programmieren in Haskell. Stefan Janssen. Strukturelle Rekursion. Universität Bielefeld AG Praktische Informatik. 10. Universität Bielefeld AG Praktische Informatik 10. Dezember 2014 Wiederholung: Schema: f :: [σ] -> τ f [] = e 1 f (a : as) = e 2 where s = f as wobei e 1 und e 2 Ausdrücke vom Typ τ sind und e 2 die Variablen

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

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

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

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

Übung Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen Übung Algorithmen und Datenstrukturen Sommersemester 2017 Marc Bux, Humboldt-Universität zu Berlin Agenda 1. (Sortierte) Listen 2. Stacks & Queues 3. Datenstrukturen 4. Rekursion und vollständige Induktion

Mehr

4.1 Bäume, Datenstrukturen und Algorithmen. Zunächst führen wir Graphen ein. Die einfachste Vorstellung ist, dass ein Graph gegeben ist als

4.1 Bäume, Datenstrukturen und Algorithmen. Zunächst führen wir Graphen ein. Die einfachste Vorstellung ist, dass ein Graph gegeben ist als Kapitel 4 Bäume 4.1 Bäume, Datenstrukturen und Algorithmen Zunächst führen wir Graphen ein. Die einfachste Vorstellung ist, dass ein Graph gegeben ist als eine Menge von Knoten und eine Menge von zugehörigen

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

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

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

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

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

Typ-Polymorphismus. November 12, 2014

Typ-Polymorphismus. November 12, 2014 Typ-Polymorphismus Universität Bielefeld AG Praktische Informatik November 12, 2014 Das Haskell Typ-System Wir beginnen mit einer Wiederholung des Bekannten: In allen Programmiersprachen sind Typ-Konzepte

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

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

Praktische Informatik 3: Funktionale Programmierung Vorlesung 6 vom : Funktionen Höherer Ordnung II und Effizienzaspekte

Praktische Informatik 3: Funktionale Programmierung Vorlesung 6 vom : Funktionen Höherer Ordnung II und Effizienzaspekte 16:02:08 2017-01-17 1 [34] Praktische Informatik 3: Funktionale Programmierung Vorlesung 6 vom 22.11.2016: Funktionen Höherer Ordnung II und Effizienzaspekte Christoph Lüth Universität Bremen Wintersemester

Mehr

Workshop Einführung in die Sprache Haskell

Workshop Einführung in die Sprache Haskell Workshop Einführung in die Sprache Haskell Nils Rexin, Marcellus Siegburg und Alexander Bau Fakultät für Informatik, Mathematik und Naturwissenschaften Hochschule für Technik, Wirtschaft und Kultur Leipzig

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

Prof. Dr. Margarita Esponda

Prof. Dr. Margarita Esponda Analyse von Algorithmen Die O-Notation WS 2012/2013 Prof. Dr. Margarita Esponda Freie Universität Berlin 1 Korrekte und effiziente Lösung von Problemen Problem Wesentlicher Teil der Lösung eines Problems.

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

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 Wiederholungsklausur 24. März 2014 Einführung

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

Lösungsvorschläge zu: Eine Einführung in die funktionale Programmierung mit Haskell

Lösungsvorschläge zu: Eine Einführung in die funktionale Programmierung mit Haskell TECHNISCHE UNIVERSITÄT CAROLO-WILHELMINA ZU BRAUNSCHWEIG Lösungsvorschlag Lösungsvorschläge zu: Eine Einführung in die funktionale Programmierung mit Haskell Jan Oliver Ringert Wintersemester 07/08 Institut

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

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

Funktionale Programmierung ALP I. Algebraische Datentypen und Abstrakte Datentypen. SS 2013 Prof. Dr. Margarita Esponda. Prof. Dr.

Funktionale Programmierung ALP I. Algebraische Datentypen und Abstrakte Datentypen. SS 2013 Prof. Dr. Margarita Esponda. Prof. Dr. Funktionale Programmierung AP I Algebraische Datentypen und Abstrakte Datentypen SS 2013 Abstrakt Datentypen Beispiel: Algebraischen Datentypen für Bäume data SBTree = SBTree SBTree AP I: Margarita Esponda,

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

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

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

INFORMATIK FÜR BIOLOGEN

INFORMATIK FÜR BIOLOGEN Technische Universität Dresden 15012015 Institut für Theoretische Informatik Professur für Automatentheorie INFORMATIK FÜR BIOLOGEN Musterklausur WS 2014/15 Studiengang Biologie und Molekulare Biotechnologie

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

WS 2011/2012. Georg Sauthoff 1. November 11, 2011

WS 2011/2012. Georg Sauthoff 1. November 11, 2011 WS 2011/2012 Georg 1 AG Praktische Informatik November 11, 2011 1 gsauthof@techfak.uni-bielefeld.de Skripte sind nun fertig und gibt es in den Tutorien Sprechstunden Zusammenfassung -Kapitel Signatur zuerst

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

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

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 15 (Linearer Speicher, Listen, Bäume)

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 15 (Linearer Speicher, Listen, Bäume) Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 15 (Linearer Speicher, Listen,

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

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

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

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

expr :: Expr expr = Mul (Add (Const 3) (Const 4)) (Div (Sub (Const 73) (Const 37)) (Const 6))

expr :: Expr expr = Mul (Add (Const 3) (Const 4)) (Div (Sub (Const 73) (Const 37)) (Const 6)) 1 - Korrektur 2 - Abstrakte Datentypen für arithmetische Ausdrücke Der Datentyp Wir beginnen zunächst mit dem algebraischen Datentyp für Ausdrücke. Hierfür definieren wir einen Konstruktor Number für Zahlen,

Mehr

WS 2011/2012. Robert Giegerich Dezember 2013

WS 2011/2012. Robert Giegerich Dezember 2013 WS 2011/2012 Robert 1 AG Praktische Informatik 11. Dezember 2013 1 robert@techfak.uni-bielefeld.de Vorschau Themen heute: Funktionen höherer Ordnung (Fortsetzung) künstliche Striktheit mehr zu fold für

Mehr

ALP I. Funktionale Programmierung

ALP I. Funktionale Programmierung ALP I Funktionale Programmierung Typ-Klassen und SS 2011 Überladung von Datentypen Funktionen sollen oft auf verschiedene Datentypen anwendbar sein, aber nicht auf beliebige Datentypen. Beispiel: Die (+)

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

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 Felder (Arrays) Programmieren in Haskell 1 Was wir heute machen Motivationsbeispiel Die Typklasse Ix Felder in Haskell Funktionstabellierung Binäre Suche Pascalsches Dreieck Ein

Mehr

Funktionale Programmierung

Funktionale Programmierung Grundlagen der funktionalen Programmierung II LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität, München 7. Mai 2009 Aus Grundlagen I Terminänderung: Vorlesung am Mo

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

WS 2011/2012. RobertGiegerich. November 12, 2013

WS 2011/2012. RobertGiegerich. November 12, 2013 WS 2011/2012 Robert AG Praktische Informatik November 12, 2013 Haskell-Syntax: Ergänzungen Es gibt noch etwas bequeme Notation für Fallunterscheidungen, die wir bisher nicht benutzt haben. Bisher kennen

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

WS 2011/2012. RobertGiegerich. November 12, 2013

WS 2011/2012. RobertGiegerich. November 12, 2013 WS 2011/2012 Robert AG Praktische Informatik November 12, 2013 Haskell-Syntax: Ergänzungen Es gibt noch etwas bequeme Notation für Fallunterscheidungen, die wir bisher nicht benutzt haben. Bisher kennen

Mehr

Crashkurs: Haskell. Mentoring FU Berlin Felix Droop

Crashkurs: Haskell. Mentoring FU Berlin Felix Droop Crashkurs: Haskell Mentoring FU Berlin 7.11.2018 Felix Droop Crashkurs Haskell 1. GHCi Umgebung

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

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

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

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

Programmierkurs II. Typsynonyme & algebraische Datentypen

Programmierkurs II. Typsynonyme & algebraische Datentypen Programmierkurs II Typsynonyme & algebraische Datentypen Um Dinge der realen Welt abzubilden, ist es nur in den seltensten Fällen komfortabel alles als Zahlen, Strings oder Listen zu kodieren. Wir benötigen

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

Klausur Programmierung WS 2002/03

Klausur Programmierung WS 2002/03 Klausur Programmierung WS 2002/03 Prof. Dr. Gert Smolka, Dipl. Inf. Thorsten Brunklaus 14. Dezember 2002 Leo Schlau 45 Vor- und Nachname Sitz-Nr. 4711 007 Matrikelnummer Code Bitte öffnen Sie das Klausurheft

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

Grundlagen der Programmierung 3 A

Grundlagen der Programmierung 3 A Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2016 Haskell, Typen, und Typberechnung Ziele: Haskells Typisierung Typisierungs-Regeln

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

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Einige andere Programmiersprachen. Typisierung in Haskell

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Einige andere Programmiersprachen. Typisierung in Haskell Haskell, Typen, und Typberechnung Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr. Manfred Schmidt-Schauß Ziele: Haskells Typisierung Typisierungs-Regeln Typ-Berechnung Milners

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

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

Algorithmen und Datenstrukturen I

Algorithmen und Datenstrukturen I Algorithmen und Datenstrukturen I Sortierverfahren D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Winter 2009/10, 18. Januar 2010,

Mehr

ALP I. Funktionale Programmierung

ALP I. Funktionale Programmierung ALP I Funktionale Programmierung Sortieren und Suchen (Teil 1) WS 2012/2013 Suchen 8 False unsortiert 21 4 16 7 19 11 12 7 1 5 27 3 8 False sortiert 2 4 6 7 9 11 12 18 21 24 27 36 Suchen in unsortierten

Mehr

Grundlagen der Programmierung 3 A

Grundlagen der Programmierung 3 A Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2017 Haskell, Typen, und Typberechnung Ziele: Haskells Typisierung Typisierungs-Regeln

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

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

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Überladung und Konversion in Haskell. Typisierung in Haskell

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Überladung und Konversion in Haskell. Typisierung in Haskell Haskell, Typen, und Typberechnung Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr Manfred Schmidt-Schauß Ziele: Haskells Typisierung Typisierungs-Regeln Typ-Berechnung Sommersemester

Mehr

WS 2011/2012. Robert Giegerich. October 30, 2013

WS 2011/2012. Robert Giegerich. October 30, 2013 WS 2011/2012 Robert AG Praktische Informatik October 30, 2013 Algebraische Datentypen Neue Datentypen werden als algebraische Datentypen eingeführt. Werte des Datentyps sind Formeln, die aus Konstruktoren

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

Probeklausur zur Vorlesung

Probeklausur zur Vorlesung Dr. Jochen Hoenicke Alexander Nutz Probeklausur zur Vorlesung Einführung in die Informatik Sommersemester 2014 Die Klausur besteht aus diesem Deckblatt und elf Blättern mit den Aufgaben, sowie einem Blatt

Mehr

9 Algebraische Datentypen

9 Algebraische Datentypen 9 Algebraische Datentypen Dieses Kapitel erweitert Haskells Typsystem, das neben Basistypen (Integer, Float, Char, Bool,... ) und Typkonstruktoren ([ ] und ( )) auch algebraische Datentypen kennt. Ganz

Mehr

Haskell Seminar Abstrakte Datentypen. Nils Bardenhagen ms2725

Haskell Seminar Abstrakte Datentypen. Nils Bardenhagen ms2725 Haskell Seminar Abstrakte Datentypen Nils Bardenhagen ms2725 Gliederung Konzept Queue Module Sets Bags Flexible Arrays Fazit Abstrakte Datentypen (ADT) Definition: Eine Zusammenfassung von Operationen,

Mehr

Agenda. 1 Einleitung. 2 Binäre Bäume. 3 Binäre Suchbäume. 4 Rose Trees. 5 Zusammenfassung & Ausblick. Haskell Bäume. Einleitung.

Agenda. 1 Einleitung. 2 Binäre Bäume. 3 Binäre Suchbäume. 4 Rose Trees. 5 Zusammenfassung & Ausblick. Haskell Bäume. Einleitung. Vortrag: Bäume in Haskell Bäume in Haskell Vortrag Christoph Forster Thomas Kresalek Fachhochschule Wedel University of Applied Sciences 27. November 2009 Christoph Forster, Thomas Kresalek 1/53 Vortrag

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 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

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

Haskell for Hackers... or why functional programming matters

Haskell for Hackers... or why functional programming matters ... or why functional programming matters Franz Pletz CCC München 27-06-2009 @ GPN8 Fahrplan Ablauf Motivation 1 Ablauf Motivation 2 3 4 Ablauf Ablauf Motivation bei Fragen/Unklarheiten:

Mehr

Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken.

Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken. Abstrakte Datentypen und Datenstrukturen/ Einfache Beispiele Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken. Datenstruktur (DS): Realisierung

Mehr

Kapitel 6: Abstraktion. Programmieren in Haskell 1

Kapitel 6: Abstraktion. Programmieren in Haskell 1 Kapitel 6: Abstraktion Programmieren in Haskell 1 Nachtrag Listenbeschreibungen divisors :: (Integral a) => a -> [a] divisors n = [d d [a] primes = [n

Mehr

Motivation Von Funktoren, Komposition, Applikation Zu Monoiden Die Monade Zusammenfassung. Monaden für alle. Franz Pletz

Motivation Von Funktoren, Komposition, Applikation Zu Monoiden Die Monade Zusammenfassung. Monaden für alle. Franz Pletz Monaden für alle Franz Pletz Chaos Computer Club München 13. Juni 2010, GPN10 Wieso, weshalb, warum? einige von euch haben sich sicher schon mal Haskell angeschaut und sind an Monaden

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