Haskell für Mathematiker
|
|
|
- Eduard Mann
- vor 7 Jahren
- Abrufe
Transkript
1 Haskell für Mathematiker Joachim Breitner AG Seminar Topology 12. Mai 2016, Karlsruhe LEHRSTUHL PROGRAMMIERPARADIGMEN 1 KIT University of the Joachim State ofbreitner Baden-Wuerttemberg - Haskell für Mathematiker and LEHRSTUHL PROGRAMMIERPARADIGMEN National Research Center of the Helmholtz Association
2 Übersicht Crash-Kurs Haskell-Syntax Rein funktionale Programmierung Typen Monaden und Kategorientheorie Lazyness Die Topologie von Haskell Beweise in Haskell? Wie gehts weiter? Joachim Breitner - Haskell für Mathematiker LEHRSTUHL PROGRAMMIERPARADIGMEN
3 Funktionen Funktion definieren: collatz 1 = 0 collatz n even n = collatz (n div 2) odd n = collatz (3 n + 1) Joachim Breitner - Haskell für Mathematiker LEHRSTUHL PROGRAMMIERPARADIGMEN
4 Funktionen Funktion definieren: collatz 1 = 0 collatz n even n = collatz (n div 2) odd n = collatz (3 n + 1) Funktion verwenden: Main> map collatz [1..25] [0,1,7,2,5,8,16,3,19,6,14,9,9,17,17,4,12,20,20,7,7,15,15,10,23] Joachim Breitner - Haskell für Mathematiker LEHRSTUHL PROGRAMMIERPARADIGMEN
5 Datentypen data Tree a = Leaf a Node (Tree a) (Tree a) leftmost (Leaf a) = a leftmost (Node t1 _) = leftmost t1 mirror (Leaf a) = a mirror (Node t1 t2) = Node (mirror t2) (mirror t1) flatten :: (a -> a -> a) -> Tree a -> a flatten (<>) = go where go (Leaf a) = a go (Node t1 t2) = go t1 <> go t Joachim Breitner - Haskell für Mathematiker LEHRSTUHL PROGRAMMIERPARADIGMEN
6 Typsystem Primitive Basis-Typen: Int, Integer, Double Der Funktionstyp: (->) Algebraische Datentypen: Bool, [a], (a,b), Maybe a, Either a b Typsynonyme: type RatTree = Tree (Int,Int) Der eingebaute IO-Typ: IO a Joachim Breitner - Haskell für Mathematiker LEHRSTUHL PROGRAMMIERPARADIGMEN
7 Typsystem Primitive Basis-Typen: Int, Integer, Double Der Funktionstyp: (->) Algebraische Datentypen: Bool, [a], (a,b), Maybe a, Either a b Typsynonyme: type RatTree = Tree (Int,Int) Der eingebaute IO-Typ: IO a Wenn es kompiliert, dann funktioniert es Joachim Breitner - Haskell für Mathematiker LEHRSTUHL PROGRAMMIERPARADIGMEN
8 Typsystem Primitive Basis-Typen: Int, Integer, Double Der Funktionstyp: (->) Algebraische Datentypen: Bool, [a], (a,b), Maybe a, Either a b Typsynonyme: type RatTree = Tree (Int,Int) Der eingebaute IO-Typ: IO a Wenn es kompiliert, dann funktioniert es. Weitere Vorteile: Typ-geführtes Programmieren. Einfaches Refactoring. Typen sind Dokumentation Joachim Breitner - Haskell für Mathematiker LEHRSTUHL PROGRAMMIERPARADIGMEN
9 Rein Funktionale Programmierung Funktionen sind wirklich Funktionen! Gleiche Eingabe heißt gleiche Ausgabe Kein globaler Zustand, keine Seiteneffekte einfacher zu verstehen, zu verändern, richtig zu machen Joachim Breitner - Haskell für Mathematiker LEHRSTUHL PROGRAMMIERPARADIGMEN
10 Rein Funktionale Programmierung Funktionen sind wirklich Funktionen! Gleiche Eingabe heißt gleiche Ausgabe Kein globaler Zustand, keine Seiteneffekte einfacher zu verstehen, zu verändern, richtig zu machen Funktionen sind Daten erster Klasse: Funktionen dürfen an Funktionen übergeben werden (siehe flatten) Funktionen können in Datenstrukturen gespeichert werden sehr ausdrucksstark Joachim Breitner - Haskell für Mathematiker LEHRSTUHL PROGRAMMIERPARADIGMEN
11 Typklassen Typklassen erlauben Algorithmen abstrakt zu fomulieren: class Semigroup a where (&) :: a -> a -> a Law: (x & y) & z x & (y & z) flattens :: Semigroup a => Tree a -> a flattens (Leaf a) = a flattens (Node t1 t2) = flattens t1 & flattens t Joachim Breitner - Haskell für Mathematiker LEHRSTUHL PROGRAMMIERPARADIGMEN
12 Typklassen Typklassen erlauben Algorithmen abstrakt zu fomulieren: class Semigroup a where (&) :: a -> a -> a Law: (x & y) & z x & (y & z) flattens :: Semigroup a => Tree a -> a flattens (Leaf a) = a flattens (Node t1 t2) = flattens t1 & flattens t2 Konkrete Typen können mit einer Instanz versehen werden: instance Semigroup Integer where (&) = (+) instance Semigroup [a] where (&) = (++) instance Semigroup a => Semigroup (Maybe a) where Nothing & Nothing = Nothing Just x & Nothing = Just x Nothing & Just x = Just x Just x1 & Just x2 = Just (x1 & x2) Joachim Breitner - Haskell für Mathematiker LEHRSTUHL PROGRAMMIERPARADIGMEN
13 Monaden in Haskell A monad is just a monoid in the category of endofunctors, what s the issue? Joachim Breitner - Haskell für Mathematiker LEHRSTUHL PROGRAMMIERPARADIGMEN
14 Monaden in Haskell A monad is just a monoid in the category of endofunctors, what s the issue? Eine Monade in Haskell ist eine Typklasse: class Monad m where return :: a -> m a (>>=) :: m a -> (a -> m b) -> m b Monad-Laws: return a >>= f f a m >>= return m (m >>= f) >>= g m >>= (\x -> f x >>= g) Joachim Breitner - Haskell für Mathematiker LEHRSTUHL PROGRAMMIERPARADIGMEN
15 Einige Monaden Ein potentieller Wert: instance Monad Maybe Viele mögliche Werte: instance Monad [] Ein Wert, der von einem Parameter abhängt: instance Monad ((->) b) Berechnungen, die etwas protokollieren: instance Monoid m => Monad (Writer m) newtype Writer m a = Write (m,a) Zustandsbehaftete Berechnungen: instance Monad (State m) newtype State s a = State (s -> (s,a)) Ein String-Parser: instance Monad Parser newtype Parser x = Parser (String -> Maybe (String, x)) Ein Wert, der mit der echten Welt interagiert: instance Monad IO Joachim Breitner - Haskell für Mathematiker LEHRSTUHL PROGRAMMIERPARADIGMEN
16 Kategorientheoretische Monaden Mögliche alternative Definition: class Monad m where Laws: map g. pure pure. g map :: (a -> b) -> m a -> m b map g. join join. map (map g) pure :: a -> m a join. map join join. join join :: m (m a) -> m a join. return join. map return id Joachim Breitner - Haskell für Mathematiker LEHRSTUHL PROGRAMMIERPARADIGMEN
17 Kategorientheoretische Monaden Mögliche alternative Definition: class Monad m where Laws: map g. pure pure. g map :: (a -> b) -> m a -> m b map g. join join. map (map g) pure :: a -> m a join. map join join. join join :: m (m a) -> m a join. return join. map return id Äquivalenz: map f = (\a -> a >>= (return. f)) pure = return return = pure join a = a >>= id a >>= f = join (map f a) Joachim Breitner - Haskell für Mathematiker LEHRSTUHL PROGRAMMIERPARADIGMEN
18 Kategorientheoretische Monaden Mögliche alternative Definition: class Monad m where Laws: map g. pure pure. g map :: (a -> b) -> m a -> m b map g. join join. map (map g) pure :: a -> m a join. map join join. join join :: m (m a) -> m a join. return join. map return id Äquivalenz: map f = (\a -> a >>= (return. f)) pure = return return = pure join a = a >>= id a >>= f = join (map f a) Kategorientheorie: m bildet Typen (Objekte) auf Typen ab map Funktionen (Morphismen) auf Funktionen wir haben einen Funktor Hask Hask. pure entspricht ε, join dem µ Joachim Breitner - Haskell für Mathematiker LEHRSTUHL PROGRAMMIERPARADIGMEN
19 do-notation Schöne Syntax für monadische Werte: z.b. IO: main = do input <- readline let w = words input putstrln $ "You entered "++ show (length w) ++ "words." main = readline >>= (\input -> let w = words input in putstrln $ "You entered "++ show (length w) ++ "words.") Joachim Breitner - Haskell für Mathematiker LEHRSTUHL PROGRAMMIERPARADIGMEN
20 do-notation Schöne Syntax für monadische Werte: z.b. Parser: rangeparser :: Parser [Word16] rangeparser = concat <$> onerangeparser sepby1 many1 (char < > char, ) onerangeparser :: Parser [Word16] onerangeparser = do n <- read fmap many1 digit <?> "Number" skipmany (char ) choice [ do char - n <- read fmap many1 digit <?> "Number" unless (n > n) $ fail $ printf "%d is not larger than %d" n n return [n..n ], return [n] ] Joachim Breitner - Haskell für Mathematiker LEHRSTUHL PROGRAMMIERPARADIGMEN
21 Lazyness In Haskell herrscht Bedarfsauswertung: f x y = if x < 0 then x x else x y f (-2) (3 div 0) = if -2 < 0 then (-2) (-2) else (-2) (3 div 0) = if True then (-2) (-2) else (-2) (3 div 0) = (-2) (-2) = 4 Ermöglicht mehr und einfachere Abstraktion unendliche Datenstrukturen enumerate :: [a] -> [(Integer, a)] enumerate = zip [1..] lustige und obskure Beweistricks (Watkinss Beweis von Conways Lost Theorem) Joachim Breitner - Haskell für Mathematiker LEHRSTUHL PROGRAMMIERPARADIGMEN
22 Die Topologie von Haskell Alle Typen sind partiell geordnet (mit kleinstem Element und Limiten von gerichteten Ketten, pcpo), z.b. Bool und [()]:.... () : [] : () : : : [] : : ( : ) () : : [] : : True False [] : Definierbare Funktionen sind monoton und stetig. Dazu kann man die Scott-Topolgie nehmen: Abgeschlossen sind die nach unten abgeschlossenen Mengen, die ihre Suprema enthalten Joachim Breitner - Haskell für Mathematiker LEHRSTUHL PROGRAMMIERPARADIGMEN
23 Beweisen mit Haskell Mehrere Ansätze: Entscheidungsprozeduren in Haskell implementieren Dank Typsystem und Reinheit weniger Fehleranfällig, aber immernoch unverifiziert. Obskure Tricks mit Lazyness Howard-Curry-Isomorphismus Aussagen Typen Beweise Programme (Terme) curry :: ((a,b) -> c) -> (a -> b -> c) curry = \f x y -> f (x,y) uncurry :: (a -> b -> c) -> ((a,b) -> c) uncurry = \f p = case p of (x,y) -> f x y Besser geeignet für ernsthafte Beweise: Coq, Agda, (Isabelle) Joachim Breitner - Haskell für Mathematiker LEHRSTUHL PROGRAMMIERPARADIGMEN
24 Bibliotheken Hackage ( mit fast 1000 Paketen Installierbar mit cabal install oder stack install Für viele praktischen Probleme gute Bibliotheken Parser Datenformate lesen und schreiben Datenbanken Grafik GUI Web-Zeug uvm. Einiges zu Algebra (algebra, constructive-algebra), wenig zu Topologie Keine (ernstzunehmende) Anbindung zu Gap, Sage, Mathemathica Joachim Breitner - Haskell für Mathematiker LEHRSTUHL PROGRAMMIERPARADIGMEN
25 Fazit Programmieren mit Haskell geht schneller produziert weniger Bugs ist für echte Anwendungen geeignet und macht mehr Spaß Joachim Breitner - Haskell für Mathematiker LEHRSTUHL PROGRAMMIERPARADIGMEN
26 Und wie geht es weiter? Tutorials und Bücher, z.b. Learn You a Haskell for Great Good! #haskell im IRC [email protected] Mailing-Liste [haskell] auf stackoverflow.com Joachim Breitner - Haskell für Mathematiker LEHRSTUHL PROGRAMMIERPARADIGMEN
27 c 2016 Joachim Breitner. Distributed under the terms of the Creative Commons Attribution license Joachim Breitner - Haskell für Mathematiker LEHRSTUHL PROGRAMMIERPARADIGMEN
Prüfung Funktionale Programmierung
Hochschule für angewandte Wissenschaften München Fakultät für Informatik und Mathematik Studiengruppe IF, IB, IC Sommersemester 2015 Prüfung Funktionale Programmierung Datum : 23.07.2015, 10:30 Uhr Bearbeitungszeit
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
Motivation Von Funktoren, Komposition, Applikation Zu Monoiden Die Monade Zusammenfassung. Monaden für alle. Franz Pletz
Monaden für alle Franz Pletz Chaos Computer Club München 13. Juni 2010, GPN10 Wieso, weshalb, warum? einige von euch haben sich sicher schon mal Haskell angeschaut und sind an Monaden
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
Funktionale Programmierung. Monoide. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München
Funktionale Programmierung Monoide Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 03.12.2018 07:53 Inhaltsverzeichnis Abstraktion..................................... 1 Eine
Monoide. Funktionale Programmierung. Prof. Dr. Oliver Braun Letzte Änderung: :54. Monoide 1/16
Monoide Funktionale Programmierung Prof. Dr. Oliver Braun Letzte Änderung: 09.10.2018 06:54 Monoide 1/16 Abstraktion gleichartige Strukturen sollten abstrahiert werden Beispiel: Collections in Haskell
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
Paradigmen der Programmierung
SS 11 Prüfungsklausur 25.07.2011 Aufgabe 5 (6+9 = 15 Punkte) a) Bestimmen Sie jeweils den Typ der folgenden Haskell-Ausdrücke: ( 1, 2 :"3", 4 < 5) :: (Char, String, Bool) [(last, tail), (head, take 5)]
Grundlegende Datentypen
Funktionale Programmierung Grundlegende Datentypen Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 14.11.2017 15:37 Inhaltsverzeichnis Typen........................................
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
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
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........................................
Unendliche Listen und Bäume
Funktionale Programmierung Unendliche Listen und Bäume Helga Karafiat, Steffen Rüther Übersicht Grundlage: Lazy Evaluation Konstruktion von unendlichen Strukturen Verwendung von unendlichen Listen Unendliche
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
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 ::
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
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
Einführung in die Funktionale Programmierung mit Haskell
Funktoren I/O Monadische Funktionen Einführung in die Funktionale Programmierung mit Haskell Input/Output LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität, München 20.
Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zur Übungsklausur -
Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zur Übungsklausur - Punkte: A1: 30, A2: 20, A3: 20, A4: 20, A5: 10, A6: 20 Punkte: /120 12.02.2012 Hinweis: Geben Sie bei allen
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)
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
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
Ü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
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
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
9 Algebraische Datentypen
9 Algebraische Datentypen Dieses Kapitel erweitert Haskells Typsystem, das neben Basistypen (Integer, Float, Char, Bool,... ) und Typkonstruktoren ([ ] und ( )) auch algebraische Datentypen kennt. Ganz
Funktionale Programmierung ALP I. Algebraische Datentypen und Abstrakte Datentypen. SS 2013 Prof. Dr. Margarita Esponda. Prof. Dr.
Funktionale Programmierung AP I Algebraische Datentypen und Abstrakte Datentypen SS 2013 Abstrakt Datentypen Beispiel: Algebraischen Datentypen für Bäume data SBTree = SBTree SBTree AP I: Margarita Esponda,
Rekursive Abstiegsparser sind durch gegenseitig rekursive Funktionen - eine für jedes Nichtterminalsymbol der Grammatik - definiert.
Parserkombinatoren Ein Programm, das für ein gegebenes Wort w entscheidet, ob es von einer gegebenen kontextfreien Grammatik G beschrieben wird, heißt Parser für G. Dabei ist es wünschenswert, dass der
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
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
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
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,
Funktionale Programmierung und Typtheorie
Funktionale Programmierung und Typtheorie 5. Fortgeschrittene Konzepte 5.1 Komprehensionen 5.2 Partielle Applikationen 5.3 Strikte und nichtstrikte Funktionen 5.4 Unendliche Datenstrukturen und verzögerte
Crashkurs: Haskell. Mentoring FU Berlin Felix Droop
Crashkurs: Haskell Mentoring FU Berlin 7.11.2018 Felix Droop Crashkurs Haskell 1. GHCi Umgebung
Crashkurs Haskell Mentoring WiSe 2016/17. Anja Wolffgramm Freie Universität Berlin
Crashkurs Haskell Mentoring WiSe 2016/17 Anja Wolffgramm Freie Universität Berlin 02/11/2016 , Inhalt Kommandozeile Haskell installieren & starten Ein 1. Haskell-Programm Funktionsdefinition Primitive
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
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
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
Einführung in die Informatik 2
Technische Universität München Fakultät für Informatik Prof. Tobias Nipkow, Ph.D. Lars Noschinski, Dr. Jasmin Blanchette, Dmitriy Traytel Wintersemester 2012/13 Lösungsblatt Endklausur 9. Februar 2013
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
Fortgeschrittene Funktionale Programmierung mit Haskell
Kind Applicative Monaden Anwendung I/O Fortgeschrittene Funktionale Programmierung mit Haskell Applikative Funktoren & Monaden Steffen Jost LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians
Zahlen in Haskell Kapitel 3
Einführung in die Funktionale Programmiersprache Haskell Zahlen in Haskell Kapitel 3 FH Wedel IT-Seminar: WS 2003/04 Dozent: Prof. Dr. Schmidt Autor: Timo Wlecke (wi3309) Vortrag am: 04.11.2003 - Kapitel
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
1 Algorithmische Grundlagen
1 Algorithmische Grundlagen Klocke/17.03.2003 1.1 1.1 Begriffsklärung Fragen Begriffsklärungen Abstraktionsebenen für Algorithmen und Datenstrukturen Algorithmus Qualität von Algorithmen Klocke/17.03.2003
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:
Einführung in die Funktionale Programmierung mit Haskell
Wiederholung Listen II Funktionsdefinition Einführung in die Funktionale Programmierung mit Haskell List-Comprehension, Patterns, Guards LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians
Ü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
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
Kapitel 6: Abstraktion. Programmieren in Haskell 1
Kapitel 6: Abstraktion Programmieren in Haskell 1 Nachtrag Listenbeschreibungen divisors :: (Integral a) => a -> [a] divisors n = [d d [a] primes = [n
2.3 Spezifikation von Abstrakten Datentypen
Abstrakte Datentypen (ADT) 2.3 Spezifikation von Abstrakten Datentypen Sichtbare Schnittstelle: Typbezeichner Signaturen der Operationen Spezifikation der Operationen Abstraktionsbarriere Implementierung
Typklassen und Überladung in Haskell
Typklassen und Überladung in Haskell Überladung: Es gibt mehrere Funktionen mit gleichem Namen. der Typ der Argumente bestimmt, welche gemeint ist. (1; i) + (3; 2i) statt (1, i) complexadd (3; 2i). Haskell-Typklassen:
Proseminar: Perlen der Informatik II Haskell List comprehensions & Typklassen
Proseminar: Perlen der Informatik II Haskell List comprehensions & Typklassen Dmitriy Traytel 8. Juli 2008 Diese Ausarbeitung im Rahmen des Proseminars Perlen der Informatik II beschäftigt sich mit einigen
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...
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
