Monaden. 14. Januar 2015
|
|
- Arnim Abel
- vor 6 Jahren
- Abrufe
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 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?
MehrFunktionale 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
MehrProgrammieren 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
MehrProgrammierparadigmen
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...
MehrInformatik-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 ::
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 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........................................
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
MehrPraktische 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
MehrTypklassen. 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
MehrMonaden. 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
MehrTyp-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
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
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
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
MehrEinfü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)
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
MehrEin-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
MehrWS 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
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
MehrProgrammieren 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
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
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
MehrTypklassen, 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
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 Programmiersprachen
Funktionale Programmiersprachen An den Beispielen Haskell und Erlang Übersicht Programmiersprachen λ-kalkül Syntax, Definitionen Besonderheiten von funktionalen Programmiersprache, bzw. Haskell Objektorientierte
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)
MehrWS 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
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
Mehr6. 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
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 =
Mehrn 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
MehrHaskell, 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
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
MehrROGER 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
MehrHallo 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
MehrGrundlagen 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
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
MehrPraktische 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
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
MehrWS 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
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.
MehrHaskell, 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 Imperative vs. funktionale Programmierung Plakativ lassen sich folgende Aussagen treffen: funktional: imperativ: Berechnung von Werten
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
MehrImplementieren 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
MehrProgrammtransformationen 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
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
MehrGrundlagen. 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.
MehrEinleitung 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
Mehr1. 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
Mehr1. 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
MehrReaktive 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
MehrFunktionale 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
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
MehrProgrammieren 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
MehrFunktionale 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
MehrOrganisatorisches. 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
MehrGrundlagen 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
MehrIntensivü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
MehrCGI 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
Mehr2 Eine einfache Programmiersprache
2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir
Mehr1 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.
MehrProgrammieren 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
MehrInformatik 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
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 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
MehrKapitel 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
MehrEinstieg 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
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..................................
MehrInstitut 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
MehrProgrammieren 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
MehrALP 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?
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
Mehr2 Eine einfache Programmiersprache
2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir
MehrWS 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
MehrProgrammieren 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
Mehr1 - 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)
MehrProgrammieren 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
MehrTeil 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:
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
Mehr5. 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
MehrFunktionen 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
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,
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
MehrProf. 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
MehrInformatik 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
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,
MehrHaskell. 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
MehrEinfü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
MehrEinfü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
MehrKapitel 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
MehrAbschnitt 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
MehrMethoden. 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
MehrOctober 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
MehrEinstieg 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,
Mehr13. 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