ALP I. Funktionale Programmierung
|
|
- Stanislaus Kopp
- vor 5 Jahren
- Abrufe
Transkript
1 ALP I Funktionale Programmierung Zusammengesetzte Datentypen in Haskell WS 2012/2013
2 Zusammengesetzte Datentypen Tupel List String
3 Zusammengesetzte Datentypen Tupel-Datentyp Ein Tupel ist eine Ansammlung von zwei oder mehreren Daten, die unterschiedliche Datentypen besitzen können. Mit Hilfe von Tupeln können zusammengehörige Daten als Einheit behandelt werden. Beispiele: Studierende ( "Peter", "Meyer", ) :: ( String, String, Int ) ( 2.5, 3.0 ) :: ( Double, Double ) Punkt
4 Funktionsdefinition mit Tupeln: Tupel-Typ distance :: (Double, Double) -> (Double, Double) -> Double distance (x1,y1) (x2,y2) = sqrt (squarex + squarey ) where squarex = (x1-x2) * (x1-x2) squarey = (y1-y2) * (y1-y2)
5 Tupel-Datentyp rgbcolor :: (Int, Int, Int) [Char] rgbcolor (red, green, blue) = case (red, green, blue) of (0,0,0) "black" (255,255,255) "white" (255,0,0) "red" (0,255,0) "green" (0,0,255) "blue" otherwise "other color"
6 Tupel-Typ Ein Tupel-Typ hat folgende allgemeine Form: ( t 1, t 2,, t n ), wobei t 1, t 2,, t n beliebige Datentypen sind Zwei einfache Funktionen für Tupel sind: fst (x, y) = x snd (x, y) = y Die erwartete Tupel-Struktur wird in den Argumenten sichtbar
7 Tupel-Typ Funktionsdefinition mit Tupeln: distance :: (Double, Double) -> (Double, Double) -> Double distance p1 p2 = sqrt(xd^2 + yd^2) where xd = (fst p1) - (fst p2) yd = (snd p1) - (snd p2)
8 Pattern-Matching mynot :: Bool -> Bool mynot True = False mynot False = True oder :: Bool -> Bool -> Bool oder False False = False oder x y = True oder0 :: Bool -> Bool -> Bool oder0 False False = False oder0 False True = True oder0 True False = True oder0 True True = True und :: Bool -> Bool -> Bool und True True = True und = False beliebige Argumente vom Typ Bool
9 Pattern-Matching In Haskell ist es möglich durch Pattern-Matching eine Auswahl verschiedener Funktionsgleichungen zu definieren. Allgemeine Form: f p 11 p 12 p 1n = e 1 f p 21 p 22 p 2n = e 2.. f p k1 p k2 p kn = e k Die p ij Muster werden von oben nach unten und von links nach rechts geprüft.
10 Typ-Synonyme Typ-Synonyme werden verwendet, um die Lesbarkeit von Programmen mit Hilfe von aussagekräftigen Typ-Namen zu verbessern. Allgemeine Form: type Typname =. Beispiele: type Student = (String, String, Int) type Point = (Double, Double)
11 Typ-Synonyme Funktionsdefinition mit Typ-Synomyme: type Point = (Double, Double) distance :: Point -> Point -> Double distance (x1,y1) (x2,y2) = sqrt (sumsq (x1-x2) (y1-y2)) where sumsq x y = x*x + y*y
12 Typ-Synonyme type Complex = (Double, Double) realpart :: Complex -> Double realpart ( real, img ) = real imgpart :: Complex -> Double Text imgpart ( real, img ) = img sumc :: Complex -> Complex -> Complex sumc (r1,i1) (r2,i2) = (r1+r2, i1+i2) absc :: Complex -> Double absc ( real, img ) = sqrt( real*real + img*img )
13 Rekursion Rekursion ist ein fundamentales Konzept in der Mathematik - eine Denkform für Problembeschreibung - enge Beziehung zur mathematischen Induktion Rekursion ist ein fundamentales Konzept in der Informatik - eine Methode zur Problemlösung Rekursive Funktionsdefinitionen sind die wichtigste Programmiertechnik in funktionalen Programmiersprachen. 13
14 Typisches Beispiel: Rekursive Funktionen Die Fakultätsfunktion Wie viele Permutationen kann eine Reihe von Objekten maximal haben? factorial :: Int -> Int factorial n = if n==0 then 1 else n * factorial (n-1) factorial :: Int -> Int factorial n n==0 = 1 otherwise = n*factorial (n-1) richtig aber nicht schön factorial :: Integer -> Integer factorial n n==0 = 1 True = n*factorial (n-1)
15 Rekursive Funktionen Die Fakultätsfunktion Pattern-Matching factorial :: Int -> Int factorial 0 = 1 factorial n = n * factorial (n-1) bigfactorial :: Integer -> Integer bigfactorial 0 = 1 bigfactorial n = n * bigfactorial (n-1)
16 Rekursive Funktionen Die Fakultätsfunktion Pattern-Matching factorial :: Int -> Int factorial n = n * factorial (n-1) factorial 0 = 1 Warning: Pattern match(es) are overlapped In the definition of `factorial': factorial 0 =... Ok, modules loaded: factorial 0 *** Exception: stack overflow
17 noch ein Klassiker: Rekursive Funktionen Größter gemeinsamer Teiler von zwei natürlichen Zahlen a, b Euklid (originaler Algorithmus) ggt :: Integer Integer Integer ggt p q p>q = ggt (p-q) q p==q = p Probleme? p<q = ggt p (q-p)
18 Rekursive Funktionen ggt :: Integer Integer Integer ggt p q p>q = ggt (p-q) q p==q = p p<q = ggt p (q-p) ggt 20 8 (20-8) 8 ggt 12 8 ggt (12-8) 8 ggt 8 4 ggt 4 4 Probleme? ggt 8 0 ggt (8-0) 0 ggt 8 0 ggt :( 4
19 Rekursive Funktionen 1. Lösung: ggt a b b == 0 = a otherwise = ggt b (a `mod` b) 2. Lösung: ggt a b a == 0 && b == 0 =??? b == 0 = a otherwise = ggt b (a `mod` b)
20 Pizzaproblem (Jakob Steiner, 1826) Wie viele Pizza-Teile entstehen maximal, wenn eine Pizza mit n geraden Schnitten aufgeteilt wird? maxsurfaces :: Int -> Int maxsurfaces 0 = 1 maxsurfaces n = maxsurfaces (n - 1) + n
21 Rekursive Funktionen Berechnung des goldenen Schnitts Zwei positive reelle Zahlen stehen im Verhältnis der goldenen Zahl, wenn a b = a + b a gilt, mit a > b > 0. Goldener Schnitt = Φ = 1+ 1 Φ goldenratio :: Int -> Double goldenratio n n == 0 = 1 n > 0 = / goldenratio (n-1) otherwise = error "not defined for negative numbers"
22 Fibonacci-Zahlen Problem: Zu Beginn eines Jahres gibt es genau ein Paar neugeborener Kaninchen. Ein Paar neugeborener Kaninchen ist erst nach einem Monat fortpflanzungsfähig, sodass erst nach zwei Monaten ein neues Kaninchenpaar zur Welt gebracht werden kann. Jedes nicht neugeborene Kaninchen bekommt ein neues Kaninchenpaar monatlich. Wie viele Kaninchen gibt es nach einem Jahr, wenn keines der Kaninchen stirbt? 22
23 Fibonacci-Zahlen
24 Fibonacci-Zahlen Der Stammbaum einer Drohne 13 8 Ururgroßeltern 5 Urgroßeltern 3 Großeltern 2 Mutter 1 Drohne 24
25 Fibonacci-Zahlen
26 Blumen Fibonacci-Zahlen
27 Fibonacci-Zahlen fib(0) fib(1) fib(2)
28 Fibonacci-Zahlen fib(0) fib(1) fib(2) fib(3)
29 Fibonacci-Zahlen fib(0) fib(1) fib(2) fib(3) fib(4)
30 Fibonacci-Zahlen fib(0) fib(1) fib(2) fib(3) fib(4) fib(5)
31 Fibonacci-Zahlen fib(0) fib(1) fib(2) fib(3) fib(4) fib(5) fib(6) fib(7) fib(n-2) + fib(n-1) fib(n) Formale rekursive Definition: fib ( 0 ) = 0 fib ( 1 ) = 1 fib ( n ) = fib ( n-2 ) + fib ( n-1 ) für alle n>1 31
32 Berechnung der Fibonacci-Zahlen Beispiel: fib 7 fib 7 1. Lösung fib 0 = 0 fib 1 = 1 fib n = fib (n-1) + fib (n-2) fib 5 fib 6 fib 3 fib 4 fib 4 fib 5 fib 1 fib 2 fib 2 fib 3 fib 2 fib 3 fib 3 fib 4 fib 0 fib 1 fib 0 fib 1 fib 1 fib 2 fib 0 fib 1 fib 1 fib 2 fib 1 fib 2 fib 2 fib 3 fib 0 fib 1 fib 0 fib 1 fib 0 fib 1 fib 1 fib 2 wiederholte Berechnungen der fib-funktion fib 0 fib 1
33 Berechnung der Fibonacci-Zahlen Beispiel: fib 7 fib 7 fib 5 fib 6 fib 3 fib 4 fib 4 fib 5 fib 1 fib 2 fib 2 fib 3 fib 2 fib 3 fib 3 fib 4 fib 0 fib 1 fib 0 fib 1 fib 1 fib 2 fib 0 fib 1 fib 1 fib 2 fib 1 fib 2 fib 2 fib 3 fib 0 fib 1 fib 0 fib 1 fib 0 fib 1 fib 1 fib 2 Fallgrube Wenn wir fib 40 mit unserer rekursiven Implementierung berechnen, wird: fib 39 einmal berechnet fib 38 2 mal berechnet fib 37 3 mal berechnet fib 36 5 mal berechnet fib 35 8 mal berechnet... fib 0 fib 1 fib mal berechnet Beim Aufruf von fib 40 werden Funktionsaufrufe gemacht
34 Berechnung der Fibonacci-Zahlen Wie viele Reduktionsschritte brauchen wir, um fib n zu berechnen? fib 0 1 fib = 1 fib 2 fib 3 fib 4 fib 5 fib Reduktionen + = = = = 13 Die Anzahl der Reduktionen für fib n ist gleich fib (n+1) Die Anzahl der rekursive Aufrufe ist eine exponentielle Funktion von n.
35 Berechnung der Fibonacci-Zahlen 2. Lösung quickfib funktioniert nur, wenn diese mit den ersten zwei Fibonacci-Zahlen gestartet wird. fib' n = quickfib 0 1 n Zähler where quickfib a b 0 = a quickfib a b n = quickfib b (a+b) (n-1) Innerhalb jedes rekursiven Aufrufs wird eine neue Fibonacci-Zahl berechnet und der Zähler verkleinert. Die neue Zahl und ihr Vorgänger werden beim nächsten rekursiven Aufruf als Parameter weitergegeben. Anzahl der Reduktionen Für die Berechnung von quickfib n benötigen wir n Reduktionen,
36 Fibonacci-Zahlen 3. Lösung mit Tupeln: nextfib :: (Integer, Integer) -> (Integer, Integer) nextfib (a,b) = (b, a+b) fib n = fst ( fibtuple n ) Text fibtuple n n==0 = (0, 1) otherwise = nextfib (fibtuple (n-1)) 36
37 Listen Listen sind die wichtigsten Datenstrukturen in funktionalen Programmiersprachen Listen stellen Sammlungen von Objekten dar, die den gleichen Datentyp besitzen Listen sind dynamische Datenstrukturen, die mit Hilfe folgender Daten-Konstruktoren erzeugt werden können Symbol Name Bedeutung [ ] nil leere Liste (:) cons am Anfang anfügen
38 Listen Listen sind rekursive Strukturen: Eine Liste ist entweder leer [] oder ein konstruierter Wert, der aus einem Listenkopf x und einer Restliste xs besteht. head tail x : xs Der Typ einer Liste, die Elemente des Typs t enthält, wird mit [t] bezeichnet.
39 Beispiele: Ausdrücke mit Listen Ausdruck Datentyp [1, 2, 3] :: [Integer] 1: [0,3,7] :: [Integer] [ [0.3, 0.0], [] ] :: [[Double]] 'a' : "Hello" :: [Char] [( 3, 0 ), ( 2, 1)] :: [ (Integer, Integer) ] [ True, True, False ] :: [ Bool ] Allgemeine Syntax: [ e 1, e 2, e 3,,e n ] Syntaktische Abkürzung: e 1 :[e 2 :[e 3 : :e n :[]]] e 1 :e 2 : :e n :[]
40 Ausdrücke mit Listen Beispiele: equiv. [1, 2, 3] 1:[2, 3] 1 : 2 : 3 : [] "hello" ['h', 'e', 'l', 'l', 'o'] 'h' : "ello" [( 3, 0 ), ( 2, 1)] ( 3, 0 ) : [( 2, 1)] [[3, 0 ], [2, 1]] [3, 0] : [2, 1] : []
41 Funktionen mit Listen kopf :: [ Integer ] -> Integer kopf (x:xs) = x kopf [] = error "ERROR: empty list" rumpf :: [ Integer ] -> [ Integer ] rumpf (x:xs) = xs rumpf [] = error "ERROR: empty list"
42 Funktionen mit Listen Addiert alle Zahlen innerhalb einer Liste summe :: [Integer] -> Integer summe ls = if ls == [] then 0 else ( kopf ls ) + summe (rumpf ls) Lösung mit Pattern-Matching über der Listenstruktur summe :: [Integer] -> Integer summe [] = 0 summe (x : xs) = x + summe xs
43 Funktionsdefinitionen mit Listen multlist :: [Integer] -> Integer multlist [] = error "the function is not defined for []" multlist [x] = x multlist (x:xs) = x * multlist xs laenge :: [Int] -> Int laenge [] = 0 laenge (x:xs) = 1 + laenge xs
44 Zehnersystem Binärsystem div 2 = mod dec2bin :: Int -> [Int] dec2bin n n<2 = [n] otherwise = dec2bin (n`div`2) ++ [n `mod`2]
45 Funktionen mit Listen Verkettungsoperator drehe [] = [] drehe (x:xs) = drehe xs ++ [x] drehe [1,2,3] drehe [2,3] ++ [1] drehe [3] ++ [2] ++ [1] drehe [] ++ [3] ++ [2] ++ [1] [] ++ [3] ++ [2] ++ [1]
46 Funktionen mit Listen = 1* * * * * *2 0 = 2(2(2(2(2(1)+0)+1)+1)+0)+1 binary2decimal xs = bin2dec ( drehe xs) bin2dec :: [Int] -> Int bin2dec [] = 0 bin2dec (x:xs) = x + 2*(bin2dec xs)
47 Funktionen mit Listen bitxor :: [Int] -> [Int] -> [Int] bitxor [] [] = [] bitxor (x:xs) (y:ys) = (exoder x y): (bitxor xs ys) bitxor = error "the two lists are not of the same length" exoder :: Int -> Int -> Int exoder x y x==y = 0 otherwise = 1
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
MehrGrundlegende Datentypen
Funktionale Programmierung Grundlegende Datentypen Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 14.11.2017 15:37 Inhaltsverzeichnis Typen........................................
MehrEinfü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
MehrFunktionale Programmierung ALP I. Die Natur rekursiver Funktionen SS Prof. Dr. Margarita Esponda. Prof. Dr.
ALP I Die Natur rekursiver Funktionen SS 2011 Die Natur rekursiver Funktionen Rekursive Funktionen haben oft folgende allgemeine Form: f :: a -> a f 0 = c f (n+1) = h (f n ) Diese Art der Definitionen
MehrGrundlegende 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
MehrFunktionale 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........................................
MehrCrashkurs 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
MehrGrundlegende 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
MehrProgrammieren 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
MehrFunktionale Programmierung mit Haskell
Funktionale Programmierung mit Haskell Dr. Michael Savorić Hohenstaufen-Gymnasium (HSG) Kaiserslautern Version 20120622 Überblick Wichtige Eigenschaften Einführungsbeispiele Listenerzeugung und Beispiel
MehrListen 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
MehrEinfü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
MehrFunktionale 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..................................
MehrDie Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten.
4.5.5 Rekursive Typen Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten. datatype IntList = Nil Cons o f ( i n t IntList ) ; Damit
MehrMusterlö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
MehrGrundlagen 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,
MehrKapitel 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
MehrWS 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
MehrWS 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
MehrProInformatik: 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
MehrParadigmen 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)]
Mehr2.5 Listen. Kurzschreibweise: [42; 0; 16] Listen werden mithilfe von [] und :: konstruiert.
2.5 Listen Listen werden mithilfe von [] und :: konstruiert. Kurzschreibweise: [42; 0; 16] # let mt = [];; val mt : a list = [] # let l1 = 1::mt;; val l1 : int list = [1] # let l = [1;2;3];; val l : int
MehrProgrammieren 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
MehrProgrammierparadigmen
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
MehrHASKELL 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,
MehrGrundlagen 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.
MehrWas 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
MehrWS 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
MehrVerarbeitung unendlicher Datenstrukturen Jetzt können wir z.b. die unendliche Liste aller geraden Zahlen oder aller Quadratzahlen berechnen:
Verarbeitung unendlicher Datenstrukturen Jetzt können wir z.b. die unendliche Liste aller geraden Zahlen oder aller Quadratzahlen berechnen: take 1 0 ( f i l t e r ( fn x => x mod 2=0) nat ) ; val it =
MehrWorkshop 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
MehrFunktionen 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 ) ->
MehrTypdeklarationen. Es gibt in Haskell bereits primitive Typen:
Typdeklarationen Es gibt in bereits primitive Typen: Integer: ganze Zahlen, z.b. 1289736781236 Int: ganze Zahlen mit Computerarithmetik, z.b. 123 Double: Fließkommazahlen, z.b. 3.14159 String: Zeichenketten,
MehrProf. 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.
MehrFunktionale 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 ::
MehrAlgorithmen 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
MehrTag 7. Pattern Matching und eigene Datentypen
Tag 7 Pattern Matching und eigene Datentypen Heute werden wir eine Technik kennenlernen, die dafür sorgt, daß wir sehr viel übersichtlichere und kürzere Programme schreiben können. Als Überleitung auf
MehrVorsicht bei redundanten und unvollständigen Matches!
Vorsicht bei redundanten und unvollständigen Matches! # let n = 7;; val n : int = 7 # match n with 0 -> "null";; Warning: this pattern-matching is not exhaustive. Here is an example of a value that is
MehrProgrammieren 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
MehrCrashkurs: Haskell. Mentoring FU Berlin Felix Droop
Crashkurs: Haskell Mentoring FU Berlin 7.11.2018 Felix Droop Crashkurs Haskell 1. GHCi Umgebung
MehrDie 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
MehrBeispiele: Funktionsabstraktion (3) Funktionsdeklaration. Funktionsdeklaration (2) Funktionsdeklaration (3) 3. Abstraktion über Funktionsbezeichner:
Beispiele: Funktionsabstraktion (3) Funktionsdeklaration 3. Abstraktion über Funktionsbezeichner: Ausdruck: f (f x) Abstraktion: \ f x -> f (f x) Mit Bezeichnervereinbarung: twice = \ f x -> f (f x) erg
MehrProgrammieren 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
MehrEinfü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
MehrALP 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:
MehrEinführung in die Funktionale Programmierung mit Haskell
Wiederholung Listen II Funktionsdefinition Einführung in die Funktionale Programmierung mit Haskell List-Comprehension, Patterns, Guards LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians
MehrVorsemesterkurs Informatik
Vorsemesterkurs Informatik Sommersemester 2011 Grundlagen der Programmierung in Haskell SoSe 2011 Stand der Folien: 30. März 2011 Übersicht 1 Ausdrücke und Typen 2 Funktionen 3 Rekursion Vorkurs Informatik
MehrGliederung. 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Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1
Übergang von funktionaler zu OOP Algorithmen und Datenstrukturen II 1 Imperative vs. funktionale Programmierung Plakativ lassen sich folgende Aussagen treffen: funktional: imperativ: Berechnung von Werten
MehrFunktionale 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
MehrVorsemesterkurs Informatik
Stand der Folien: 31. März 2011 Vorsemesterkurs Informatik Sommersemester 2011 Grundlagen der Programmierung in Haskell SoSe 2011 Übersicht 1 Ausdrücke und Typen 2 Funktionen 3 Rekursion 4 Listen 5 Paare
MehrProgrammieren 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
MehrWS 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
MehrGrundprinzipien 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
MehrINFORMATIK 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
MehrFunktionale 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
MehrGrundlagen der Programmierung 2 (1.C)
Grundlagen der Programmierung 2 (1.C) Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 8. Mai 2007 Listen und Listenfunktionen Listen modellieren Folgen von gleichartigen,
MehrFunktionale Programmierung
Funktionale Programmierung Jörg Kreiker Uni Kassel und SMA Solar Technology AG Wintersemester 2011/2012 2 Teil II Typen mit Werten und Ausdruck, sogar listenweise 3 Haskell Programme Programm Module ein
MehrBeispiele: (Funktionen auf Listen) (3) Bemerkungen: Die Datenstrukturen der Paare (2) Die Datenstrukturen der Paare
Beispiele: (Funktionen auf Listen) (3) Bemerkungen: 5. Zusammenhängen der Elemente einer Liste von Listen: concat :: [[a]] -> [a] concat xl = if null xl then [] else append (head xl) ( concat (tail xl))
MehrProgrammierkurs 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
MehrWS 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.
MehrLazy Pattern Matching. 10. Dezember 2014
Lazy Lazy s Universität Bielefeld AG Praktische Informatik 10. Dezember 2014 Themen-Vorschau : as-s und lazy s Client-Server-Programmierung Lazy s matching (alias Mustervergleich) kennen wir bereits aus
MehrFunktionale 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
MehrWS 2011/2012. Georg Sauthoff 1. October 26, 2011
WS 2011/2012 Georg 1 AG Praktische Informatik October 26, 2011 1 gsauthof@techfak.uni-bielefeld.de pea*nuts pea*nuts steht für probieren, erfahren, anwenden - Naturwissenschaften und Technik für Schülerinnen
MehrGeheimnisprinzip: (information hiding principle, Parnas 1972)
2. Abstrakte Datentypen 2.0 Begriffe Geheimnisprinzip: (information hiding principle, Parnas 1972) Zugriffe auf Teile einer Programmeinheit, die für die reguläre Benutzung nicht erforderlich sind, sollten
MehrWS 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.
MehrPraktische 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
MehrLösungsvorschlag Serie 2 Rekursion
(/) Lösungsvorschlag Serie Rekursion. Algorithmen-Paradigmen Es gibt verschiedene Algorithmen-Paradigmen, also grundsätzliche Arten, wie man einen Algorithmus formulieren kann. Im funktionalen Paradigma
MehrGliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung
Gliederung n Teil I: Einleitung und Grundbegriffe l 1. Organisatorisches l 2. Grundlagen von Programmiersprachen n Teil II: Imperative und objektorientierte Programmierung l 1. Grundelemente der Programmierung
MehrALP 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 (+)
MehrVorsemesterkurs Informatik Sommersemester Aufgabenblatt Nr. 5A. Lösung zu Aufgabe 1 (Fehler in Haskell-Quelltext: Parsefehler)
Fachbereich Informatik und Mathematik Institut für Informatik Vorsemesterkurs Informatik Sommersemester 2017 Aufgabenblatt Nr. 5A zu Aufgabe 1 (Fehler in Haskell-Quelltext: Parsefehler) Laden Sie von der
MehrFunktionale Programmiersprachen
Funktionale Programmiersprachen An den Beispielen Haskell und Erlang Übersicht Programmiersprachen λ-kalkül Syntax, Definitionen Besonderheiten von funktionalen Programmiersprache, bzw. Haskell Objektorientierte
MehrProgrammieren in Haskell
Programmieren in Haskell Programmieren mit Listen Programmieren in Haskell 1 Was wir heute machen Eigener Listen-Datentyp Eine Sortierfunktion Nützliche Listenfunktionen Programmieren in Haskell 2 Ein
MehrProgrammieren in Haskell Programmieren mit Listen
Programmieren in Haskell Programmieren mit Listen Peter Steffen Universität Bielefeld Technische Fakultät 14.11.2008 1 Programmieren in Haskell Ein eigener Listen-Datentyp data List a = Nil Cons a (List
MehrFrank eine Programmiersprache mit Effekten
Frank eine Programmiersprache mit Effekten Tim Baumann Curry Club Augsburg 23. Februar 2017 1 / 30 Paper: GitHub: Do Be Do Be Do von Sam Lindley, Conor McBride und Craig McLaughlin https://github.com/cmcl/frankjnr
MehrGrundlagen der Programmierung 2 (1.B)
Grundlagen der Programmierung 2 (1.B) Prof. Dr. Manfred Schmidt-Schauß Künstliche Intelligenz und Softwaretechnologie 20. April 2011 Aufrufhierarchie und Rekursive Definitionen f, g, f i seien Haskell-definierte
MehrAlgorithmen 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
MehrProgrammieren 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
MehrLösungshinweise/-vorschläge zum Übungsblatt 4: Grundlagen der Programmierung (WS 2018/19)
Prof. Dr. Ralf Hinze Sebastian Schweizer, M.Sc. Peter Zeller, M. Sc. TU Kaiserslautern Fachbereich Informatik AG Programmiersprachen Lösungshinweise/-vorschläge zum Übungsblatt 4: Grundlagen der Programmierung
MehrHaskell 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Übung zu Algorithmen und Datenstrukturen (für ET/IT)
Übung zu Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2015 Matthias Wieczorek Computer-Aided Medical Procedures Technische Universität München Administratives Zentralübung (Mittwoch, 09:45
MehrProgrammieren in Haskell
Programmieren in Haskell Programmieren mit Listen Programmieren in Haskell 1 Was wir heute machen Eigener Listen-Datentyp Eine Sortierfunktion Nützliche Listenfunktionen Programmieren in Haskell 2 Ein
MehrInformatik I: Einführung in die Programmierung
Informatik I: Einführung in die Programmierung 7. Albert-Ludwigs-Universität Freiburg Bernhard Nebel 31. Oktober 2014 1 31. Oktober 2014 B. Nebel Info I 3 / 20 Um zu, muss man zuerst einmal. Abb. in Public
MehrInformatik I - Programmierung Globalübung Hugs98 Currying. Hugs98 Currying
Informatik I - Programmierung Globalübung 13.01.2003 Hugs98 Currying Thomas Weiler Fachgruppe Informatik RWTH Aachen T. Weiler, RWTH Aachen - 1 - Hugs98 Currying Bedienung Typen Fehlermeldungen Inhalt
MehrÜbung zu Algorithmen und Datenstrukturen (für ET/IT)
Übung zu Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2017 Rüdiger Göbl, Mai Bui Computer Aided Medical Procedures Technische Universität München Administratives Zentralübung (Mittwoch, 09:45
MehrVorsemesterkurs Informatik
Vorsemesterkurs Informatik Grundlagen der Programmierung in Haskell SoSe 2012 Stand der Folien: 28. März 2012 Übersicht 1 Ausdrücke und Typen 2 Funktionen 3 Rekursion 4 Listen 5 Paare und Tupel Vorkurs
MehrBasiskonstrukte von Haskell
Basiskonstrukte von Haskell PD Dr. David Sabel Goethe-Universität Frankfurt am Main 29. September 2015 Basistypen und Operationen Ganzzahlen: Int = Ganzzahlen beschränkter Länge Integer = Ganzzahlen beliebiger
Mehr2. Algorithmische Methoden 2.1 Rekursion. 18. April 2017
2. Algorithmische Methoden 2.1 Rekursion 18. April 2017 Rekursiver Algorithmus Ein rekursiver Algorithmus löst ein Problem, indem er eine oder mehrere kleinere Instanzen des gleichen Problems löst. Beispiel
Mehr2.3 Spezifikation von Abstrakten Datentypen
Abstrakte Datentypen (ADT) 2.3 Spezifikation von Abstrakten Datentypen Sichtbare Schnittstelle: Typbezeichner Signaturen der Operationen Spezifikation der Operationen Abstraktionsbarriere Implementierung
MehrGrundlagen der Programmierung 2 (1.B)
Grundlagen der Programmierung 2 (1.B) Prof. Dr. Manfred Schmidt-Schauß Künstliche Intelligenz und Softwaretechnologie 27. April 2012 Beispiel: Aufrufhierarchie quadrat x = x*x quadratsumme x y = (quadrat
MehrFunktionen; Rekursion
restart; Der Operator - Funktionen; Rekursion Mit dem - -Operator definiert man eine Funktion (Abbildung. '-' hat (zunächst einen Namen (den Formalparameter als linken und einen Ausdruck als rechten Operanden.
MehrWS 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)
MehrProgrammieren 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Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1
Übergang von funktionaler zu OOP Algorithmen und Datenstrukturen II 1 Imperative vs. funktionale Programmierung Plakativ lassen sich folgende Aussagen treffen: funktional: imperativ: Berechnung von Werten
MehrC.3 Funktionen und Prozeduren
C3 - Funktionen und Prozeduren Funktionsdeklarationen in Pascal auch in Pascal kann man selbstdefinierte Funktionen einführen: Funktionen und Prozeduren THEN sign:= 0 Funktion zur Bestimmung des Vorzeichens
MehrEinfü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