Monaden. 14. Januar 2015

Größe: px
Ab Seite anzeigen:

Download "Monaden. 14. Januar 2015"

Transkript

1 Universität Bielefeld AG Praktische Informatik 14. Januar 2015

2 Imperativ nennt man Progamiersprachen, die mit Anweisungen operieren. Jede Anweisung hat Wirkungen auf einen globalen Zustand, der wiederum die nächsten Anweisugen beeinflusst. Solche imperativen Elemente braucht man auch in einer funktionalen Sprache, zum Beispiel zur Kommunikation mit der Außenwelt, sei es Ein- oder Ausgabe von Benutzerdaten, oder die Steuerung von Prozessen. Allgemeines

3 Was heißt imperativ? Ein imperatives Programm besteht aus Anweisungen. Sie modifizieren einen globalen Zustand (Speicherzellen, Variablen, Drucker, Datei, ), und hängen auch von ihm ab. imp. Funktionen sind oft keine Funktionen im mathematischen Sinn, Wert von f (x) hängt nicht nur von x, sondern auch vom gerade vorliegenden Zustand ab, d.h. das Prinzip der referential transparency ist verletzt. Die Ausführungsreihenfolge ist wesentlich und im Detail festgelegt. Beispiel: URM-Programme, C, Pascal, Java,... Allgemeines

4 Referential Transparency (Wiederholung) ein Funktionsaufruf hat keine Seiteneffekte bei gleichen Argumentwerten bleibt der Funktionswert gleich wesentliches Merkmal von (puren) funktionalen Programmiersprachen Vorteile bei der Analyse (Korrektheit, Effizienz,... ) und Optimierung von Code Allgemeines

5 Referential Transparency (Wiederholung) ein Funktionsaufruf hat keine Seiteneffekte bei gleichen Argumentwerten bleibt der Funktionswert gleich wesentliches Merkmal von (puren) funktionalen Programmiersprachen Vorteile bei der Analyse (Korrektheit, Effizienz,... ) und Optimierung von Code Beispiel für eine C-Funktion mit Seiteneffekten 1 int a = 0; Allgemeines 2 3 int f( int x) 4 { 5 a = a + 1; 6 return x * x * a; 7 }

6 Funktionale im Unterschied zur imperativen Funktionale Sprache: Es werden nur Datenabhängigkeiten beschrieben, diese sind explizit ( referential transparency ), eine Berechnungsreihenfolge ist nicht festgelegt. Es gibt keine Anweisungen, keinen Zustand, kein vorher/nachher Kann man eine zustandsbasierte Rechnung simulieren, wenn man sie unbedingt braucht? Allgemeines

7 Expliziter Zustand Simulation der zustandsbasierten Rechnung: Expliziten Zustand s einführen. Statt z = f x y; r = g z nun überall Zustand angeben, z.b. 1 (s,z) = f s x y 2 (s,u) = f s x y 3 (s,r) = g s z und ein Zustand s darf nie zweimal benutzt werden. Allgemeines Jedoch: Im normalen Haskell gibt es aber keine Hindernis, alle drei gleichzeitig zu benutzen

8 Erwünschte Zustände Wo wünscht man sich die imperative : Ein-und Ausgabe sind inhärent zustandsabhängig und müssen in ihrer Abfolge koordiniert werden Funktionen mit Nebenergebnis, das überall behandelt werden muss, möchten dies in einem Zustand verstecken. Beispiel: Rechnen mit dem Typ Int Dafür gibt es ein besonderes Konzept und eine spezielle Notation do-notation. Allgemeines

9 wie es nicht geht Erster Ansatz wäre vielleicht: 1 readcharfromkeyboard :: Char 2 readintfromkeyboard :: Int 3 4 stringtoscreen :: String - > Bool

10 wie es nicht geht Erster Ansatz wäre vielleicht: 1 readcharfromkeyboard :: Char 2 readintfromkeyboard :: Int 3 4 stringtoscreen :: String - > Bool Probleme dabei Auswertungsreihenfolge Verletzung der Referential Transparency von Funktionen

11 Auswertungsreihenfolge besonders bei Lazy-Evaluation

12 Auswertungsreihenfolge besonders bei Lazy-Evaluation Example f x = x + readintfromkeyboard - readintfromkeyboard

13 Auswertungsreihenfolge besonders bei Lazy-Evaluation Example f x = x + readintfromkeyboard - readintfromkeyboard printlist [] =? printlist ( x: xs) = stringtoscreen x...?... printlist xs main... =... printlist l

14 do-notation do-notation erlaubt Folge von Aktionen zu programmieren: Sie werden der Reihe nach ausgeführt können Werte berechnen und an Variable übergeben (aber nur einmal!) oder auch nur etwas ausführen Werte aus zuvor berechneten Variablen benutzen

15 Abstrakter Datentyp Ein- und Ausgabefunktionen sind Aktionen eines abstrakten Datentyps a werden importiert wie üblich: import System. Eingaben haben den Typ z.b. String oder Int Ausgabe-Aktionen liefern den Typ () Für die Verkettung von Aktionen gibt es eine besondere Notation Beispiel: do x <- getline; print (length x)

16 Verkettung von Aktionen 1 > do 2 x <- act1 3 act2 4 y <- act3 x 5 act4 x y 6 return (f x y) Ausführung der Aktionen 1-4 in der angegebenen Reihefolge, Erzeugung und Wiederverwendung von Zwischenergebnissen

17 -Beispiel: Ausgabe 1 putstr :: String - > () -- vordefiniert 2 3 putstrln :: String - > () 4 5 putstrln str = do putstr str 6 putstr \n 1 put4times str = do putstrln str 2 putstrln str 3 putstrln str 4 putstrln str

18 -Beispiel: Eingabe 1 getline :: String -- vordefiniert 2 getchar :: Char -- vordefiniert 3 4 read2lines :: () 5 read2lines = do getline 6 getline 7 putstrln " Two lines read 8 and used for nothing " Die Zeilen werden zwar von der Eingabe entnommen, aber dann nicht weiter verwendet...

19 -Beispiel: Eingabeverarbeitung und Ausgabe 1 reverse2lines :: () 2 reverse2lines = do line1 <- getline 3 line2 <- getline 4 putstrln ( reverse line2 ) 5 putstrln ( reverse line1 ) Die eingelesenen Strings werden an Namen gebunden und können so in anderen Funktionen verwendet werden

20 Weitere -Funktionen Weitere -Funktionen für Lesen und Schreiben von Dateien Kommunikation mit dem Betriebssystem...

21 -Funktionen 1 getchar :: Char 2 getline :: String 3 4 putchar :: Char -> () 5 putstr :: String - > () 6 putstrln :: String - > () 7 print :: Show a => a -> ()

22 -Funktionen 1 getchar :: Char 2 getline :: String 3 4 putchar :: Char -> () 5 putstr :: String - > () 6 putstrln :: String - > () 7 print :: Show a => a -> () Wiederholung () ist der Unit-Datentyp, der nur den Wert () enthält Die Typen der -Funktionen erklären, warum man sie in der do-notation (s.o.) gebrauchen kann

23 Main bei kompilierten Programmen per Standard wird bei einem kompilierten Programm die Funktion main in dem Module Main als Programmeinsprung verwendet: > module Main > where > main :: () Zugriff auf Kommandozeilenargumente: import System. Environment getargs :: [ String ] Exit-Status: data ExitCode = ExitSuccess ExitFailure Int deriving ( Eq, Ord, Read, Show ) exitwith :: ExitCode - > a

24 Main btw Falls ein Modul keine module-deklaration enthält, ist das äquivalent zu: 1 > module Main ( main ) 2 > where

25 Convenience--Funktionen 1 readfile :: FilePath - > String 2 writefile :: FilePath - > String - > () 3 appendfile :: FilePath - > String - > ()

26 Convenience--Funktionen 1 readfile :: FilePath - > String 2 writefile :: FilePath - > String - > () 3 appendfile :: FilePath - > String - > () Sonstige -Funktionen: 1 openfile :: FilePath - > Mode - > Handle 2...

27 Einfaches Beispiel Datei lesen, verarbeiten, schreiben in Hugs 1 > import System. 2 > import Data. Char 3 4 > gross :: String - > String 5 > gross t = map toupper t 6 7 > encode file = do 8 > inp <- readfile ( file ) 9 > writefile ( file ++". enc ") ( gross inp )

28 Stellenwert der do-notation Die do-notation ist überaus hilfreich für zustandsbasierte Programmierug, aber sie ist nur syntaktischer Zucker, also eine bequeme Schreibweise für Programme, die man auch ohne sie programmieren kann diese andere erklärt die do-notation in normalem Haskell, aber diese Erklärung der do-notation muss man nicht kennen, um sie zu benutzen... es sei denn, man will sie erweitern für den eigenen Bedarf

29 Imperativ funktional... Wie bringt man die Aktionen auf Zuständen in einer funktionalen Welt unter?

30 Imperativ funktional... Wie bringt man die Aktionen auf Zuständen in einer funktionalen Welt unter? Funktionsanwendung z = f x y oder z = (f $ x ) $ y ersetzen durch Operation, die besagt Wende f auf s, x, und y an und produziere s und z Wende f auf s, x, y und z an und produziere s und z und so weiter, ohne dass man die Folge s, s,... explizit hinschreiben muss.

31 sind eine mathematisches Struktur, wie Gruppe, Ring, Körper, usw. dort untersucht in der der Kategorientheorie Hier: eine Klasse von Daten mit Operationen auf diesen, die bestimmte Eigenschaften besitzen

32 sind eine mathematisches Struktur, wie Gruppe, Ring, Körper, usw. dort untersucht in der der Kategorientheorie Hier: eine Klasse von Daten mit Operationen auf diesen, die bestimmte Eigenschaften besitzen Grundidee: Statt Datentyp a verwendet man Typ M a Funktionsanwendung f a ersetzt durch a >>= f, direkte Anwendung f (M a) ist durch den Typ ausgeschlossen wobei >>= neben der Berechnung von f a weitere Geschäfte verrichten kann...

33 Besonderheit der sind nicht einfach zu verstehen, weil die Funktionsanwendung die grundlegendste Operation der funktionalen ist, genau diese jetzt durch etwas (fast) Beliebiges ersetzt wird, das in jeder Monade anders ist und was wir auch selbst definieren können für neue Konkrete sind Typen, die Instanz der Typklasse Monad sind

34 Funktionen auf In Haskell-Notation: 1 ( > >=) :: m a -> (a -> m b) -> m b 2 return :: a -> m a 3 4 (>>) :: m a -> m b -> m b 5 fail :: String - > m a a und b: beliebige Typen m a und m b: ihre Werte in Monade verpackt (>>=) und (>>) werden bind oder bindto ausgesprochen

35 funktionen 1 ( > >=) :: m a -> (a -> m b) -> m b 2 return :: a -> m a 3 4 (>>) :: m a -> m b -> m b 5 fail :: String - > m a Was leistet >>=? Entpackt a aus der Monade, wendet f darauf an, liefert verpacktes Ergebnis, das weiter verwendet werden kann in der Form x >>= f >>= g >>= h... Das Auspacken geschieht bei jeder Monade auf eigene Art und es kann auch direkt das Ergebnis erzeugen.

36 funktionen 1 ( > >=) :: m a -> (a -> m b) -> m b 2 return :: a -> m a 3 4 (>>) :: m a -> m b -> m b 5 fail :: String - > m a Was leistet return? Verpacken eines Werts a in der Monade, damit man mit >>= und >> darauf arbeiten kann

37 funktionen 1 ( > >=) :: m a -> (a -> m b) -> m b 2 return :: a -> m a 3 4 (>>) :: m a -> m b -> m b 5 fail :: String - > m a Was leistet >>? Machmal möchte man eine Konstante für eine Funktion einsetzen: 1 > count xs = sum ( map (\ x - >1) xs) x >> f setzt x voraus, um f zu berechnen, also werden Ketten von Operationen sequenzialisiert durch x >> f1 >> f2 >> f3...

38 funktionen 1 ( > >=) :: m a -> (a -> m b) -> m b 2 return :: a -> m a 3 4 (>>) :: m a -> m b -> m b 5 fail :: String - > m a Was leistet >>? Machmal möchte man eine Konstante für eine Funktion einsetzen: 1 > count xs = sum ( map (\ x - >1) xs) x >> f setzt x voraus, um f zu berechnen, also werden Ketten von Operationen sequenzialisiert durch x >> f1 >> f2 >> f3... Beispiel: Sukzessives Schreiben von Output

39 funktionen 1 ( > >=) :: m a -> (a -> m b) -> m b 2 return :: a -> m a 3 4 (>>) :: m a -> m b -> m b 5 fail :: String - > m a Was leistet fail? Erzeugen eines Fehler-Strings, mit dem die Rechnung abbricht

40 als Instanzen sind eine Typklasse: Monad ihr gehören alle Typen an, auf denen man die funktionen definiert hat Monad ist vordefiniert, vergleichbar anderen Typklassen wie Show, Eq, Ord, Num jeder konkrete Typ kann zur Instanz der Typklasse gemacht werden

41 Typklasse Monad Vordefinierte Typklasse: (Achtung: m ist eine Variable für einen einstelligen Typ-Konstruktor!) 1 infixl 1 > >=, >> 2 class Monad m where 3 ( > >=) :: m a -> (a -> m b) -> m b 4 return :: a -> m a 5 6 (>>) :: m a -> m b -> m b 7 fail :: String - > m a

42 Typklasse Monad Vordefinierte Typklasse: (Achtung: m ist eine Variable für einen einstelligen Typ-Konstruktor!) 1 infixl 1 > >=, >> 2 class Monad m where 3 ( > >=) :: m a -> (a -> m b) -> m b 4 return :: a -> m a 5 6 (>>) :: m a -> m b -> m b 7 fail :: String - > m a 6 7 m >> k = m >>= \_ -> k -- default 8 fail s = error s -- default

43 Monad-Laws 1 return gibt nur sein Argument zurück und führt keine weiteren Berechnungen durch: m >>= return = m return x >>= f = f x 2 >>= ist assoziativ: (m >>= f) >>= g = m >>= (\x -> (f x >>= g)) analog zur Komposition von Funktionen (m. f ). g = m. (f. g)

44 Monad-Laws 1 return gibt nur sein Argument zurück und führt keine weiteren Berechnungen durch: m >>= return = m return x >>= f = f x 2 >>= ist assoziativ: (m >>= f) >>= g = m >>= (\x -> (f x >>= g)) analog zur Komposition von Funktionen (m. f ). g = m. (f. g) Analog muss (>>) assoziativ sein: (a >> b) >> c = a >> (b >> c) fail muss die Berechnung abbrechen NB: Diese Eigenschaften werden von -Instanzen gefordert, können aber vom Compiler nicht überprüft werden!

45 Beispiel: Monad 1 data a = Just a 2 Nothing 3 4 deriving ( Show, Eq)

46 Beispiel: Monad 1 data a = Just a 2 Nothing 3 4 deriving ( Show, Eq) 5 6 instance Monad where 7 ( Just x) >>= k = k x 8 Nothing > >= k = Nothing 9 return x = Just x

47 Beispiel: Monad 1 data a = Just a 2 Nothing 3 4 deriving ( Show, Eq) 5 6 instance Monad where 7 ( Just x) >>= k = k x 8 Nothing > >= k = Nothing 9 return x = Just x Beispiele: Just 1 >>= \x -> Just 2 >>= \y -> return (x+y) ( ) Just 1 >>= \x -> Nothing >>= \y -> return (x+y) ( )

48 Notation...? Im wesentlichen hat man einen monadischen Wert m darauf angewandte Ketten von >>= und >> Operationen Das ist einfach, sieht aber nicht besonders übersichtlich aus...

49 (Do-Expression) Syntaktischer Zucker, um >>= Ketten schöner hinschreiben zu können.

50 (Do-Expression) Syntaktischer Zucker, um >>= Ketten schöner hinschreiben zu können. m > >= f = do { x <- m; f x }

51 (Do-Expression) Syntaktischer Zucker, um >>= Ketten schöner hinschreiben zu können. m > >= f = do { x <- m; f x } bzw. m >>= f = do x <- m f x

52 (Do-Expression) Syntaktischer Zucker, um >>= Ketten schöner hinschreiben zu können. m > >= f = do { x <- m; f x } bzw. m >>= f = do x <- m und m1 >> m2 = do f x <- m1 <- m2

53 (Do-Expression) Syntaktischer Zucker, um >>= Ketten schöner hinschreiben zu können. m > >= f = do { x <- m; f x } bzw. m >>= f = do x <- m und m1 >> m2 = do _ f x _ bzw. m1 >> m2 = do m1 m2 <- m1 <- m2

54 Allgemeines Übersetzungsschema: 1 m1 >>= \ x_1 -> m_2 >>= \ x_2 -> m_n >>= \ x_n -> return = do 5 x_1 <- m_1 6 x_2 <- m_2 7 x_3 <- m_ x_n <- m_n 10 return...

55 Beobachtungen >>= (bind-operator) gibt eine Reihenfolge vor Schachtelung ist beliebig (Assoziativität)

56 -Beispiel 1 do 2 x <- Just 1 3 y <- Just 2 4 return (x+y)

57 -Beispiel 1 do 2 x <- Just 1 3 y <- Just 2 4 return (x+y) Zum Ausprobieren in Hugs: do {x<- Just 1; y <- Just 2; return (x+y)} 2 Just 3 == do { x <- Just 1; y <- Just 2; return ( x + y)}

58 -Beispiel 1 do 2 x <- Just 1 3 y <- Just 2 4 return (x+y) Zum Ausprobieren in Hugs: do {x<- Just 1; y <- Just 2; return (x+y)} 2 Just 3 == do { x <- Just 1; y <- Just 2; return ( x + y)} 5 6 do 7 x <- Just 1 8 y <- Nothing 9 return (x+y)

59 -Beispiel 1 f dict = do 2 x <- lookup " alpha " dict 3 y <- lookup " beta " dict 4 z <- lookup " gamma " dict 5 return (x + y + z) 6 lookup :: String - > Dict - > Int

60 -Beispiel 1 f dict = do 2 x <- lookup " alpha " dict 3 y <- lookup " beta " dict 4 z <- lookup " gamma " dict 5 return (x + y + z) 6 lookup :: String - > Dict - > Int statt sowas wie: 6 f dict = if isjust x && isjust y && isjust z 7 then Just ( fromjust x + fromjust y + fr 8 else Nothing 9 where 10 x = lookup " alpha " dict 11 y = lookup " beta " dict 12 z = lookup " gamma " dict

61 Monad-Laws in do-notation 1 do { x <- m ; return x } = m 2 do { y <- return x ; f y } = f x 3 Assoziativität von >>=: do { y <- do { x <- m; f x} ; g y } = do { x <- m; do { y <- f x ; g y } } = do { x <- m; y <- f x; g y}

62 let-deklaration Weiterer syntaktischer Zucker statt 1 let a = 42 2 in do 3 print a kann man auch schreiben: 1 do 2 let a = 42 3 print a

63 -Beispiel 1 -- data [a] = a : [a] 2 -- [] 3 4 instance Monad [] where 5 ( > >=) l f = concat ( map f l) 6 return x = [x]

64 -Beispiel mit selbstdefinierten Datentyp 1 data List a = Cons a ( List a) 2 Nil 3 4 instance Monad List where 5 ( > >=) l f = concatlist ( maplist f l) 6 return x = [x]

65 -Beispiel 1 -- data [a] = a : [a] 2 -- [] 3 4 instance Monad [] where 5 ( > >=) l f = concat ( map f l) 6 return x = [x]

66 -Beispiel 1 -- data [a] = a : [a] 2 -- [] 3 4 instance Monad [] where 5 ( > >=) l f = concat ( map f l) 6 return x = [x] do x <- [1,2] y <- [3,4] return (x * y)

67 -Beispiel 1 -- data [a] = a : [a] 2 -- [] 3 4 instance Monad [] where 5 ( > >=) l f = concat ( map f l) 6 return x = [x] do x <- [1,2] y <- [3,4] return (x * y) => [3,4,6,8]

68 -Beispiel 1 -- data [a] = a : [a] 2 -- [] 3 4 instance Monad [] where 5 ( > >=) l f = concat ( map f l) 6 return x = [x] do x <- [1,2] y <- [3,4] return (x * y) => [3,4,6,8] Analog zu folgender beschreibung: [ x * y x <- [1,2], y <- [3,4] ]

69 Beobachtungen zur do-notation sieht sehr imperativ aus Zuweisungen zu Variablen aber nur in Single-Assignment (SA) Form

70 Zurück zum mit der Monade als einstelliger Typkonstruktor als ADT importieren mit import System. Ausgabe mit Typ () Eingabe mit Typ String, Int, etc

71 Zurück zum mit der Monade als einstelliger Typkonstruktor als ADT importieren mit import System. Ausgabe mit Typ () Eingabe mit Typ String, Int, etc eigenschaft definiert die Reihenfolge -Fehler durch error

72 -Monad Beobachtungen Referential-Transparency?

73 -Monad Beobachtungen Referential-Transparency? ja nur sind die Werte von a verborgen (ADT-Eigenschaft) wie kommt der eigene Code z.b. an den Char-Wert bei String?

74 -Monad Beobachtungen Referential-Transparency? ja nur sind die Werte von a verborgen (ADT-Eigenschaft) wie kommt der eigene Code z.b. an den Char-Wert bei String? durch die Definition von >>=

75 -Monad Beobachtungen Referential-Transparency? ja nur sind die Werte von a verborgen (ADT-Eigenschaft) wie kommt der eigene Code z.b. an den Char-Wert bei String? durch die Definition von >>= eindeutige Sequenzierung der -Funktionen durch eigenschaft

76 Anwendungsgebiete Wichtigste Anwendung der Input / Output Fehlerbehandlung zustandbasierte Programme destructive updates (!!) Pssst: Verpackung des Zustands in einer Monade erlaubt dem Compiler speichereffiziente Implementierung durch destruktive Updates.

Praktische Informatik 3

Praktische Informatik 3 Praktische Informatik 3 Christian Maeder WS 03/04 Vorlesung vom 12.1.2004: Ein/Ausgabe in funktionalen Sprachen Vorlesung vom 12.1.2004: Ein/Ausgabe in funktionalen Sprachen 3 Inhalt Wo ist das Problem?

Mehr

Funktionale Programmierung

Funktionale Programmierung Monaden LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität, München 30. April 2009 Monaden Eine Monade ist ein Programmier-Schema für sequentielle Berechnungen. In Haskell

Mehr

Programmieren in Haskell

Programmieren in Haskell Programmieren in Haskell Monaden Programmieren in Haskell 1 Sequenzierung mit Dollar und Euro Die Atommüll-Metapher Maybe- und Listen-Monaden Return Die do-notation Monaden als Berechnungen Listenbeschreibungen

Mehr

Programmierparadigmen

Programmierparadigmen Programmierparadigmen D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Sommer 2009, 22. Juni 2009, c 2009 D.Rösner D. Rösner PGP 2009...

Mehr

Informatik-Seminar Thema: Monaden (Kapitel 10)

Informatik-Seminar Thema: Monaden (Kapitel 10) Informatik-Seminar 2003 - Thema: Monaden (Kapitel 10) Stefan Neumann 2. Dezember 2003 Inhalt Einleitung Einleitung Die IO()-Notation Operationen Einleitung Gegeben seien folgende Funktionen: inputint ::

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

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

Basiskonstrukte von Haskell

Basiskonstrukte 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

Mehr

Praktische Informatik 3: Funktionale Programmierung Vorlesung 11 vom : Monaden als Berechnungsmuster

Praktische Informatik 3: Funktionale Programmierung Vorlesung 11 vom : Monaden als Berechnungsmuster 16:02:16 2017-01-17 1 [30] Praktische Informatik 3: Funktionale Programmierung Vorlesung 11 vom 10.01.2017: Monaden als Berechnungsmuster Christoph Lüth Universität Bremen Wintersemester 2016/17 Frohes

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

Monaden. 6. August 2009

Monaden. 6. August 2009 Monaden 6. August 2009 1 Motivation Monaden sind ein Konzept aus der Mathematik.Viele glauben, Monaden seien schwierig zu verstehen, oder dass die Benutzung von Monaden den Prinzipien der funktionalen

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

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

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

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 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 20. November 2006 Monaden und I/O Monade ist ein Datentyp für (sequentielle)

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

Ein-Ausgabe. 9.1 Zustände und Seiteneffekte

Ein-Ausgabe. 9.1 Zustände und Seiteneffekte 9 Ein-Ausgabe Alle Funktionen in Haskell sind referentiell transparent: Die Anwendung einer Funktion F auf ein Argument A liefert stets dasselbe Ergebnis, ist also unabhängig vom Zustand des Systems. Klassische

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

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

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

Programmieren in Haskell

Programmieren in Haskell beschreibungen Universität Bielefeld AG Praktische Informatik October 21, 2014 der funktionalen Programmierung gibt es allen Programmiersprachen, aber der funktionalen Programmierung werden sie besonders

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

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

Typklassen, Eingabe und Monaden In Haskell

Typklassen, Eingabe und Monaden In Haskell Typklassen, Eingabe und Monaden In Haskell Felix Rahmati Jonathan Beierle 1 Einleitung In dieser Ausarbeitung befassen wir uns mit den Vorteilen einiger fortgeschrittener Konzepte der funktionalen Programmierung

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

Funktionale Programmiersprachen

Funktionale Programmiersprachen Funktionale Programmiersprachen An den Beispielen Haskell und Erlang Übersicht Programmiersprachen λ-kalkül Syntax, Definitionen Besonderheiten von funktionalen Programmiersprache, bzw. Haskell Objektorientierte

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

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

WS 2011/2012. Georg Sauthoff 1. November 1, 2011 WS 2011/2012 Georg 1 AG Praktische Informatik November 1, 2011 1 gsauthof@techfak.uni-bielefeld.de Übungen Abgaben und Aufgabenblätter am Ende der Vorlesung Skript gibt es demnächst in den Übungen Der

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

6. Funktionen, Parameterübergabe

6. Funktionen, Parameterübergabe 6. Funktionen, Parameterübergabe GPS-6-1 Themen dieses Kapitels: Begriffe zu Funktionen und Aufrufen Parameterübergabearten call-by-value, call-by-reference, call-by-value-and-result in verschiedenen Sprachen

Mehr

Verarbeitung 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: 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 =

Mehr

n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen - 1 -

n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen - 1 - n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik n "Informatik" = Kunstwort aus Information

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

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

WS 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

Mehr

ROGER GILLIAR / MCS GMBH HASKELL FÜR JAVA PROGRAMMIERER

ROGER GILLIAR / MCS GMBH HASKELL FÜR JAVA PROGRAMMIERER ROGER GILLIAR / MCS GMBH HASKELL FÜR JAVA PROGRAMMIERER interface ImportantService { Double getmoney(); } ... sollte stets ein so genannter Kontrakt definiert werden, über den die Bedeutung der verschiedenen

Mehr

Hallo Haskell. (Funktionale Programmierung) Prof. Dr. Oliver Braun. Letzte Änderung: :08. Hallo Haskell 1/23

Hallo Haskell. (Funktionale Programmierung) Prof. Dr. Oliver Braun. Letzte Änderung: :08. Hallo Haskell 1/23 Hallo Haskell (Funktionale Programmierung) Prof. Dr. Oliver Braun Letzte Änderung: 18.03.2018 21:08 Hallo Haskell 1/23 Glasgow Haskell Compiler (GHC) der Haskell-Compiler ist der GHC Sie installieren ihn

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

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

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

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

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

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

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

Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1

Ü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

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

Implementieren von Klassen

Implementieren von Klassen Implementieren von Klassen Felder, Methoden, Konstanten Dr. Beatrice Amrhein Überblick Felder/Mitglieder (Field, Member, Member-Variable) o Modifizierer Konstanten Methoden o Modifizierer 2 Felder und

Mehr

Programmtransformationen und Induktion in funktionalen Programmen

Programmtransformationen und Induktion in funktionalen Programmen Programmtransformationen und Induktion in funktionalen Programmen Prof. Dr. Manfred Schmidt-Schauß Künstliche Intelligenz und Softwaretechnologie 13. Januar 2009 Einschub: Monadisches IO verzögern Implementierung

Mehr

Funktionale Programmierung

Funktionale 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

Mehr

Grundlagen. Felix Döring, Felix Wittwer 24. April Python-Kurs

Grundlagen. Felix Döring, Felix Wittwer 24. April Python-Kurs Grundlagen Felix Döring, Felix Wittwer 24. April 2017 Python-Kurs Gliederung 1. Scriptcharakter 2. Programmierparadigmen Imperatives Programmieren Das Scoping Problem Objektorientiertes Programmieren 3.

Mehr

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens Grundlagen von C Jonas Gresens Proseminar C Grundlagen und Konzepte Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität

Mehr

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 - 1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik

Mehr

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 - 1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik

Mehr

Reaktive Programmierung Vorlesung 1 vom : Was ist Reaktive Programmierung?

Reaktive Programmierung Vorlesung 1 vom : Was ist Reaktive Programmierung? 1 [36] Reaktive Programmierung Vorlesung 1 vom 14.04.15: Was ist Reaktive Programmierung? Christoph Lüth & Martin Ring Universität Bremen Sommersemester 2014 2 [36] Organisatorisches Vorlesung: Donnerstags

Mehr

Funktionale Programmierung mit Haskell

Funktionale Programmierung mit Haskell Funktionale Programmierung mit Haskell Prof. Dr. Hans J. Schneider Lehrstuhl für Programmiersprachen und Programmiermethodik Friedrich-Alexander-Universität Erlangen-Nürnberg Sommersemester 2011 I. Die

Mehr

Programmieren in Haskell Programmieren mit Listen

Programmieren 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

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 Hashing

Mehr

Funktionale Programmierung mit Haskell

Funktionale Programmierung mit Haskell Funktionale Programmierung mit Haskell Prof. Dr. Hans J. Schneider Lehrstuhl für Programmiersprachen und Programmiermethodik Friedrich-Alexander-Universität Erlangen-Nürnberg Sommersemester 2011 I. Die

Mehr

Organisatorisches. Probleme mit dem herkömmlichen Ansatz. Warum Reaktive Programmierung? The Reactive Manifesto. Amdahl s Law

Organisatorisches. Probleme mit dem herkömmlichen Ansatz. Warum Reaktive Programmierung? The Reactive Manifesto. Amdahl s Law 1 2 4 8 Organisatorisches Vorlesung: Donnerstags 8-10, MZH 1450 Reaktive Programmierung Vorlesung 1 vom 14.04.15: Was ist Reaktive Programmierung? Christoph Lüth & Martin Ring Universität Bremen Sommersemester

Mehr

Grundlagen von Python

Grundlagen von Python Einführung in Python Grundlagen von Python Felix Döring, Felix Wittwer November 17, 2015 Scriptcharakter Programmierparadigmen Imperatives Programmieren Das Scoping Problem Objektorientiertes Programmieren

Mehr

Intensivübung zu Algorithmen und Datenstrukturen

Intensivübung zu Algorithmen und Datenstrukturen Intensivübung zu Algorithmen und Datenstrukturen Silvia Schreier Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Übersicht Programmierung Fallunterscheidung Flussdiagramm Bedingungen Boolesche

Mehr

CGI Programmierung mit Ha. Markus Schwarz

CGI Programmierung mit Ha. Markus Schwarz CGI Programmierung mit Ha Markus Schwarz Überblick Was ist funktionale Programmierung Einführung in Haskell CGI-Programmierung mit Haskell Ein etwas größeres Beispiel Was ist funktionale Programm Ein Programm

Mehr

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache 2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir

Mehr

1 Funktionale vs. Imperative Programmierung

1 Funktionale vs. Imperative Programmierung 1 Funktionale vs. Imperative Programmierung 1.1 Einführung Programme einer funktionalen Programmiersprache (functional programming language, FPL) bestehen ausschließlich aus Funktionsdefinitionen und Funktionsaufrufen.

Mehr

Programmieren in Haskell

Programmieren in Haskell Universität Bielefeld AG Praktische Informatik October 12, 2014 Wir begnen mit eem Überblick über die Syntax von Namen versus Schlüsselwörter Namen bezeichnen Werte (aller Art) und sd frei wählbar Schlüsselwörter

Mehr

Informatik I. 4. Funktionen: Aufrufe und Definitionen. 25. Oktober Albert-Ludwigs-Universität Freiburg. Informatik I.

Informatik I. 4. Funktionen: Aufrufe und Definitionen. 25. Oktober Albert-Ludwigs-Universität Freiburg. Informatik I. 4. Funktionen: Aufrufe und en Aufrufe Albert-Ludwigs-Universität Freiburg 25. Oktober 2013 1 / 23 Aufrufe Funktionsaufrufe 2 / 23 Funktionsaufrufe Innerhalb von Programmiersprachen ist eine Funktion ein

Mehr

Programmieren in Haskell

Programmieren 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

Mehr

Programmieren in Haskell

Programmieren 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

Mehr

Kapitel 1: Informationsverarbeitung durch Programme

Kapitel 1: Informationsverarbeitung durch Programme LUDWIG- MAXIMILIANS- UNIVERSITY MUNICH DEPARTMENT INSTITUTE FOR INFORMATICS Skript zur Vorlesung: Einführung in die Informatik: Systeme und Anwendungen Sommersemester 2009 Kapitel 1: Informationsverarbeitung

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 27 Einstieg in die Informatik mit Java Klassen als Datenstrukturen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 27 1 Überblick: Klassen als Datenstruktur 2 Vereinbarung

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

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke Java 2 Markus Reschke 07.10.2014 Datentypen Was wird gespeichert? Wie wird es gespeichert? Was kann man mit Werten eines Datentyps machen (Operationen, Methoden)? Welche Werte gehören zum Datentyp? Wie

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

ALP I Einführung in Haskell

ALP I Einführung in Haskell ALP I Einführung in Haskell WS 2012/2013 Was ist Haskell? Haskell ist eine rein Funktionale Programmiersprache mit einer nach Bedarf Auswertung-Strategie oder "Lazy Evaluation". Was bedeutet rein funktional?

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

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache 2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir

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

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

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 C++ Templates

Programmieren in C++ Templates Programmieren in C++ Templates Inhalt Templates Funktions- und Klassen-Templates Spezialisierung von Templates Generische Klassen Einbinden von Templates Instantiierung (implizit und explizit) Templates

Mehr

Teil III. Funktionale Programmierung in Haskell

Teil III. Funktionale Programmierung in Haskell Teil III Funktionale Programmierung in Haskell 178 1. Einführung: Funktionale Programmierung hier: informelle Einführung ignoriert: monadische Ein-/Ausgabe, Typklassen,... zum Ausprobieren von Beispielprogrammen:

Mehr

Lösungsvorschlag Serie 2 Rekursion

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

Mehr

5. Januar Universität Bielefeld AG Praktische Informatik. Programmieren in Haskell. Stefan Janssen. Abstrakte Datentypen.

5. Januar Universität Bielefeld AG Praktische Informatik. Programmieren in Haskell. Stefan Janssen. Abstrakte Datentypen. Universität Bielefeld AG Praktische Informatik 5. Januar 2015 Themen-Vorschau Module In der Software-Entwicklung unterscheidet zwei Arten von : konkrete beziehen sich auf eine konkrete Repräsentation in

Mehr

Funktionen in Matlab. Nutzerdefinierte Funktionen können in.m-datei gespeichert werden

Funktionen in Matlab. Nutzerdefinierte Funktionen können in.m-datei gespeichert werden Funktionen in Matlab Zusammenfassung von Befehlssequenzen als aufrufbare/wiederverwendbare Funktionen in einem Programmblock mit festgelegter Schnittstelle (Signatur) Derartige prozedurale Programmierung

Mehr

Typdeklarationen. Es gibt in Haskell bereits primitive Typen:

Typdeklarationen. 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,

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

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe Was sind Operatoren Ein Operator ist eine in die Programmiersprache eingebaute Funktion, die

Mehr

Informatik I: Einführung in die Programmierung

Informatik I: Einführung in die Programmierung Informatik I: Einführung in die Programmierung 5., bedingte Ausführung und Albert-Ludwigs-Universität Freiburg Bernhard Nebel 27. Oktober 2017 1 und der Typ bool Typ bool Typ bool Vergleichsoperationen

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

Haskell. A Wild Ride. Sven M. Hallberg. sm@khjk.org. 21C3 Berlin / Bildungswerk Hamburg 20.6.2007 p. 1/36

Haskell. A Wild Ride. Sven M. Hallberg. sm@khjk.org. 21C3 Berlin / Bildungswerk Hamburg 20.6.2007 p. 1/36 21C3 Berlin / Bildungswerk Hamburg 20.6.2007 p. 1/36 Haskell A Wild Ride Sven M. Hallberg sm@khjk.org 21C3 Berlin / Bildungswerk Hamburg 20.6.2007 p. 2/36 Überblick Vorsichtsmaßnahmen Einführung und Sprachgrundlagen

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

Einführung in die Programmierung mit VBA

Einführung in die Programmierung mit VBA Einführung in die Programmierung mit VBA Vorlesung vom 07. November 2016 Birger Krägelin Inhalt Vom Algorithmus zum Programm Programmiersprachen Programmieren mit VBA in Excel Datentypen und Variablen

Mehr

Kapitel 1: Informationsverarbeitung durch Programme

Kapitel 1: Informationsverarbeitung durch Programme LUDWIG- MAXIMILIANS- UNIVERSITY MUNICH DEPARTMENT INSTITUTE FOR INFORMATICS Skript zur Vorlesung: Einführung in die Informatik: Systeme und Anwendungen Sommersemester 2018 Kapitel 1: Informationsverarbeitung

Mehr

Abschnitt 11: Korrektheit von imperativen Programmen

Abschnitt 11: Korrektheit von imperativen Programmen Abschnitt 11: Korrektheit von imperativen Programmen 11. Korrektheit von imperativen Programmen 11.1 11.2Testen der Korrektheit in Java Peer Kröger (LMU München) in die Programmierung WS 16/17 931 / 961

Mehr

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom Einstieg in die Informatik mit Java, Vorlesung vom 2.5.07 Übersicht 1 2 definition 3 Parameterübergabe, aufruf 4 Referenztypen bei 5 Überladen von 6 Hauptprogrammparameter 7 Rekursion bilden das Analogon

Mehr

October 29, Universität Bielefeld AG Praktische Informatik. Programmieren in Haskell. Stefan Janssen. Typ-Synonyme. Algebraische Datentypen

October 29, Universität Bielefeld AG Praktische Informatik. Programmieren in Haskell. Stefan Janssen. Typ-Synonyme. Algebraische Datentypen Universität Bielefeld AG Praktische Informatik October 29, 2014 Typsynonyme Neue Typnamen durch Typsynonyme: 1 type Pair a b = (a,b) 2 type Triple a b c = (a,b,c) 3 type OrdList a = [ a] definiert neue

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 47 Einstieg in die Informatik mit Java Anweisungen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 47 1 Ausdrucksanweisung 2 Einfache Ausgabeanweisung 3 Einfache Eingabeanweisung,

Mehr

13. Funktionale Konzepte in Java

13. Funktionale Konzepte in Java Funktionale vs. Imperative Programmierung 13. Funktionale Konzepte in Java Funktionale Programmierung, Lambda Ausdrücke, Datenströme, Pipelines Imperative Konzepte Ausführen von Anweisungen Zustand (z.b.

Mehr