Programmieren in Haskell
|
|
|
- Kirsten Sternberg
- vor 8 Jahren
- Abrufe
Transkript
1 Programmieren in Haskell Monaden Programmieren in Haskell 1
2 Sequenzierung mit Dollar und Euro Die Atommüll-Metapher Maybe- und Listen-Monaden Return Die do-notation Monaden als Berechnungen Listenbeschreibungen und Monaden State-Monaden Die IO-Monade Was wir heute machen Programmieren in Haskell 2
3 Dollar i (h (g (f x))) i $ h $ g $ f x Programmieren in Haskell 3
4 Dollar i (h (g (f x))) i $ h $ g $ f x infixr 0 $ ($) :: (a -> b) -> a -> b f $ x = f x Programmieren in Haskell 3
5 Euro infixl 0 > ( >) :: a -> (a -> b) -> b x > f = f x i $ h $ g $ f x f x > g > h > i f x > g > h > i Programmieren in Haskell 4
6 Atommüll-Metapher Abfall-Prozessoren sind eine Metapher für Funktionen. Sie nehmen Atommüll, verarbeiten ihn und spucken Atommüll aus: Programmieren in Haskell 5
7 Abfall-Container Atommüll ist gefährlich, also wird er verpackt: Programmieren in Haskell 6
8 bind-roboter Ein bind-roboter entpackt einen Container und steckt den Inhalt (Atommüll) in einen Prozessor: Programmieren in Haskell 7
9 bind (>>=) container >>= fn = let a = extractwaste container in fn a (>>=) :: m a -> (a -> m b) -> m b Programmieren in Haskell 8
10 bind (>>=) container >>= fn = let a = extractwaste container in fn a (>>=) :: m a -> (a -> m b) -> m b Mit dem bind-roboter können wir Prozessoren hintereinanderschalten: wasteinacontainer >>= (\a1 -> putincontainer (decompose a1)) >>= (\a2 -> putincontainer (decay a2)) >>= (\a3 -> putincontainer (melt a3)) Programmieren in Haskell 8
11 Bisherige Metaphern 1. Prozessoren (Funktionen) 2. Atommüll (Eingaben) 3. Container (monadische Werte) 4. Der bind-roboter >>= 5. Fabriken (Monaden) Programmieren in Haskell 9
12 Die Maybe-Monade Zur Erinnerung der Maybe-Datentyp: data Maybe a = Nothing Just a Programmieren in Haskell 10
13 Die Maybe-Monade Zur Erinnerung der Maybe-Datentyp: data Maybe a = Nothing Just a Die bind-funktion: container >>= fn = case container of Nothing -> Nothing Just a -> fn a (>>=) :: Maybe a -> (a -> Maybe b) -> Maybe b Programmieren in Haskell 10
14 Die Listen-Monade container >>= fn = case container of [] -> [] xs -> concat (map fn xs) (>>=) :: [a] -> (a -> [b]) -> [b] Programmieren in Haskell 11
15 Return Was machen wir mit Maschinen, die direkt Atommüll ausgeben ohne ihn vorher in Container zu verpacken? return :: a -> m a Das ist unsere Funktion putincontainer von vorhin. Programmieren in Haskell 12
16 Return Was machen wir mit Maschinen, die direkt Atommüll ausgeben ohne ihn vorher in Container zu verpacken? return :: a -> m a Das ist unsere Funktion putincontainer von vorhin. Die return-funktion für Maybe: return a = Just a Programmieren in Haskell 12
17 Return Was machen wir mit Maschinen, die direkt Atommüll ausgeben ohne ihn vorher in Container zu verpacken? return :: a -> m a Das ist unsere Funktion putincontainer von vorhin. Die return-funktion für Maybe: return a = Just a und für Listen: return a = [a] Programmieren in Haskell 12
18 Die do-notation Monadischer Code wie bisher: wasteinacontainer >>= \a1 -> foo a1 >>= \a2 -> bar a2 >>= \a3 -> baz a3 Programmieren in Haskell 13
19 Die do-notation Monadischer Code wie bisher: wasteinacontainer >>= \a1 -> foo a1 >>= \a2 -> bar a2 >>= \a3 -> baz a3 Etwas anders geschrieben: wasteinacontainer >>= \a1 -> foo a1 >>= \a2 -> bar a2 >>= \a3 -> baz a3 Programmieren in Haskell 13
20 Die do-notation Monadischer Code wie bisher: wasteinacontainer >>= \a1 -> foo a1 >>= \a2 -> bar a2 >>= \a3 -> baz a3 Etwas anders geschrieben: wasteinacontainer >>= \a1 -> foo a1 >>= \a2 -> bar a2 >>= \a3 -> baz a3 Und mit syntaktischem Zucker: do a1 <- wasteinacontainer a2 <- foo a1 a3 <- bar a2 baz a3 Programmieren in Haskell 13
21 Monaden als Berechnungen Unserer bisherige Metapher sah Monaden als Container. Jetzt interpretieren wir Monaden als Berechnungen: >>=: verkettet zwei monadische Berechnungen (lässt die erste Berechnung laufen, füttert das Ergebnis in die zweite Berechung und lässt auch diese laufen) return x: die Berechung, die einfach x als Ergebnis hat Programmieren in Haskell 14
22 Rechnen mit der Maybe-Monade Beginnen wir mit einem Telefonbuch: phonebook :: [(String,String)] phonebook = [ ("Bob", " "), ("Fred", " "), ("Alice", " "), ("Jane", " ") ] Programmieren in Haskell 15
23 Rechnen mit der Maybe-Monade Beginnen wir mit einem Telefonbuch: phonebook :: [(String,String)] phonebook = [ ("Bob", " "), ("Fred", " "), ("Alice", " "), ("Jane", " ") ] Darin können wir nach Namen und dazu gespeicherten Telefonnummern suchen: lookup :: a -- Schluessel -> [(a, b)] -- Lookup-Tabelle -> Maybe b -- Ergebnis des Lookups Programmieren in Haskell 15
24 Programmieren in Haskell 16
25 Beispiel: Prelude> lookup "Bob" phonebook Just " " Prelude> lookup "Jane" phonebook Just " " Prelude> lookup "Zoe" phonebook Nothing Programmieren in Haskell 16
26 Kombination von Lookups comb :: Maybe a -> (a -> Maybe b) -> Maybe b comb Nothing _ = Nothing comb (Just x) f = Just $ f x Programmieren in Haskell 17
27 Kombination von Lookups comb :: Maybe a -> (a -> Maybe b) -> Maybe b comb Nothing _ = Nothing comb (Just x) f = Just $ f x comb ist nichts anderes als der bind-operator (>>=) für Maybe-Berechnungen. Also: gettaxowed :: String -- Name -> Maybe Double -- Steuerschuld gettaxowed name = lookup name phonebook >>= (\number -> lookup number governmentaldatabase) >>= (\registration -> lookup registration taxdatabase) Programmieren in Haskell 17
28 Kombination von Lookups comb :: Maybe a -> (a -> Maybe b) -> Maybe b comb Nothing _ = Nothing comb (Just x) f = Just $ f x comb ist nichts anderes als der bind-operator (>>=) für Maybe-Berechnungen. Also: gettaxowed :: String -- Name -> Maybe Double -- Steuerschuld gettaxowed name = lookup name phonebook >>= (\number -> lookup number governmentaldatabase) >>= (\registration -> lookup registration taxdatabase) Oder in der do-notation: Programmieren in Haskell 17
29 gettaxowed name = do number <- lookup name phonebook registration <- lookup number governmentaldatabase lookup registration taxdatabase Programmieren in Haskell 18
30 Die weiteren Tabellen: governmentaldatabase :: [(String,String)] governmentaldatabase = [ (" ", "B "), (" ", "F "), (" ", "A "), (" ", "J ") ] taxdatabase :: [(String,String)] taxdatabase = [ ("B ", "lots of"), ("F ", "not so much"), ("A ", "gets something back"), ("J ", "criminal") ] Programmieren in Haskell 19
31 do number <- lookup "Bob" phonebook registration <- lookup number governmentaldatabase taxowed <- lookup registration taxdatabase return taxowed => Just "lots of" Programmieren in Haskell 20
32 do number <- lookup "Bob" phonebook registration <- lookup number governmentaldatabase taxowed <- lookup registration taxdatabase return taxowed => Just "lots of" do number <- lookup "Zoe" phonebook registration <- lookup number governmentaldatabase taxowed <- lookup registration taxdatabase return taxowed Programmieren in Haskell 20
33 do number <- lookup "Bob" phonebook registration <- lookup number governmentaldatabase taxowed <- lookup registration taxdatabase return taxowed => Just "lots of" do number <- lookup "Zoe" phonebook registration <- lookup number governmentaldatabase taxowed <- lookup registration taxdatabase return taxowed => Nothing Programmieren in Haskell 20
34 Eigenschaften der Maybe-Monade Die Maybe-Monade repräsentiert Berechnungen, die versagen können Versagen wird propagiert! Programmieren in Haskell 21
35 Die Listen-Monade Berechnungen in der Listen-Monade reprässentieren null oder mehr gültige Antworten: instance Monad [] where return a = [a] xs >>= f = concat (map f xs) Programmieren in Haskell 22
36 Tic-Tac-Toe Wir wollen alle Brett-Konfigurationen ausrechnen, die sich nach drei Zügen ergeben können: getnextconfigs :: Board -> [Board] getnextconfigs = details not important tick :: [Board] -> [Board] tick bds = concatmap getnextconfigs bds find3rdconfig :: Board -> [Board] find3rdconfig bd = tick $ tick $ tick [bd] Programmieren in Haskell 23
37 Tic-Tac-Toe Wir wollen alle Brett-Konfigurationen ausrechnen, die sich nach drei Zügen ergeben können: getnextconfigs :: Board -> [Board] getnextconfigs = details not important tick :: [Board] -> [Board] tick bds = concatmap getnextconfigs bds find3rdconfig :: Board -> [Board] find3rdconfig bd = tick $ tick $ tick [bd] Mit der Listen-Monade: Programmieren in Haskell 23
38 find3rdconfig :: Board -> [Board] find3rdconfig bd0 = do bd1 <- getnextconfigs bd0 bd2 <- getnextconifgs bd1 bd3 <- getnextconfigs bd2 return bd3 Programmieren in Haskell 24
39 Listenbeschreibungen und Monaden pythags = [ (x, y, z) x <- [1..], y <- [x..], z <- [y..], x^2 + y^2 == z^2 ] Programmieren in Haskell 25
40 Listenbeschreibungen und Monaden pythags = [ (x, y, z) x <- [1..], y <- [x..], z <- [y..], x^2 + y^2 == z^2 ] pythags = do x <- [1..] y <- [x..] z <- [y..] guard (x^2 + y^2 == z^2) return (x, y, z) Programmieren in Haskell 25
41 guard :: Bool -> [()] guard True = [()] guard False = [] Programmieren in Haskell 26
42 guard :: Bool -> [()] guard True = [()] guard False = [] pythags = let ret x y z = [(x, y, z)] gd x y z = concatmap (\_ -> ret x y z) (guard $ x^2 + y^2 == z^2) doz x y = concatmap (gd x y) [y..] doy x = concatmap (doz x ) [x..] dox = concatmap (doy ) [1..] in dox Programmieren in Haskell 26
43 start... x y z Programmieren in Haskell 27
44 Seiteneffekte mit der State-Monade Container werden mit einem Ticket gefüttert und geben ihren Inhalt und ein neues Ticket (eine Quittung) aus: Programmieren in Haskell 28
45 bind in der State-Monade Programmieren in Haskell 29
46 Input/Output Die IO-Monade ist eine State-Monade, in der der Zustand die komplette Umgebung ist. Dies erlaubt sequentielle Ein-/Ausgabe: f = do putstrln "What is your name?" name <- getline putstrln ("Nice to meet you, " ++ name ++ "!") Programmieren in Haskell 30
47 Input/Output Die IO-Monade ist eine State-Monade, in der der Zustand die komplette Umgebung ist. Dies erlaubt sequentielle Ein-/Ausgabe: f = do putstrln "What is your name?" name <- getline putstrln ("Nice to meet you, " ++ name ++ "!") Diese Konstruktion legt die Auswertungsreihenfolge fest! Programmieren in Haskell 30
48 Copyright notice Programmieren in Haskell 31
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
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
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)
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........................................
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
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
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
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
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 ::
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
WS 2011/2012. Georg Sauthoff 1. October 18, 2011
in in WS 2011/2012 Georg 1 AG Praktische Informatik October 18, 2011 1 [email protected] Neue Übungsgruppen in neue Übungsgruppen neue Tutoren Sprechstunden in GZI-Arbeitsraum (V2-240)
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
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)
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
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
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
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
[10] Software Transactional Memory in Haskell, Tortenwurf und Aufgabenblatt 7
Haskell Live [10 Software Transactional Memory in Haskell, Tortenwurf und Aufgabenblatt 7 Bong Min Kim [email protected] Christoph Spörk [email protected] Bernhard Urban [email protected]
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
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
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
Programmieren in Haskell Felder (Arrays)
Programmieren in Haskell Felder (Arrays) Peter Steffen Universität Bielefeld Technische Fakultät 05.12.2008 1 Programmieren in Haskell Quadratzahlen 0 1 2 3 n 0 1 4 9 n 2 squareslist :: Integral a => [a]
4.1 Bäume, Datenstrukturen und Algorithmen. Zunächst führen wir Graphen ein. Die einfachste Vorstellung ist, dass ein Graph gegeben ist als
Kapitel 4 Bäume 4.1 Bäume, Datenstrukturen und Algorithmen Zunächst führen wir Graphen ein. Die einfachste Vorstellung ist, dass ein Graph gegeben ist als eine Menge von Knoten und eine Menge von zugehörigen
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
Ströme als unendliche Listen in Haskell
Kapitel 3 Ströme als unendliche Listen in Haskell Ein Strom ist eine Folge oder Liste von Daten, die man in Haskell als Liste bzw. auch als potentiell unendliche Liste darstellen kann. Die Modellvorstellung
Funktionale Programmierung
Graphische Benutzeroberflächen mit Gtk2Hs LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität, München 28. Mai 2009 Hintergrund-Infos zu GTK GTK ist Abkürzung für The GIMP
Monaden in anderen Programmiersprachen
Monaden in anderen Programmiersprachen Themen Informatik-Seminar SS 2013: Programmiersprachen und Sprachsysteme Bei: Prof. Dr. Schmidt, FH Wedel inf9500 Sebastian Philipp Überblick Motivation Monaden in
HTk: Ein GUI für Haskell
HTk: Ein GUI für Haskell URL: www.informatik.uni-bremen.de/htk/ HTk basiert auf dem GUI von Tcl/Tk Haskell: monadische Programmieroberfläche strukturiert in viele Typklassen GUI-Objekte Event-Verarbeitung
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
Grundlagen der Informatik 12. Strukturen
12. Strukturen Strukturen und deren Komponenten Strukturen im Projekt Dynamisch erstellte Strukturen Strukturen und Operatoren Strukturen und Funktionen Einfach verkettete Liste Grundlagen der Informatik
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
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
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
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
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
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
Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 8 -
Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 8 - Dozent: Prof. Dr. G. Rote Tutoren: J. Fleischer, T. Haimberger, N. Lehmann, C. Pockrandt, A. Steen 03.01.2012 Ziele
Welche Informatik-Kenntnisse bringen Sie mit?
Welche Informatik-Kenntnisse bringen Sie mit? So gehen Sie vor! Lösen Sie die Aufgaben der Reihe nach von 1 bis 20, ohne das Lösungsblatt zur Hilfe zu nehmen. Der Schwierigkeitsgrad der Aufgaben nimmt
Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016
to to May 2016 to What is Programming? All computers are stupid. All computers are deterministic. You have to tell the computer what to do. You can tell the computer in any (programming) language) you
Praktische Informatik 3: Funktionale Programmierung Vorlesung 2 vom : Funktionen und Datentypen
Rev. 1843 1 [35] Praktische Informatik 3: Funktionale Programmierung Vorlesung 2 vom 23.10.2012: Funktionen und Datentypen Christoph Lüth Universität Bremen Wintersemester 2012/13 2 [35] Fahrplan Teil
Funktionale Programmierung mit Haskell. Jan Hermanns
Funktionale Programmierung mit Haskell Jan Hermanns 1 Programmiersprachen imperativ deklarativ konventionell OO logisch funktional Fortran Smalltalk Prolog Lisp C Eiffel ML Pascal Java Haskell 2 von Neumann
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
7down Zusatzaufgaben. Mathias Ziebarth und Joachim Breitner. 13. März 2008
7down Zusatzaufgaben Mathias Ziebarth und Joachim Breitner 13. März 2008 1 Problem 1 Unser Programm hat folgende Lösungen berechnet: Testfall 1 153131 141441 973493 330529 869017 876927 Testfall 2 279841
Funktionale Programmierung bringt s! Ein Ausflug mit Haskell in die Praxis
Funktionale Programmierung bringt s! Ein Ausflug mit Haskell in die Praxis Stefan Wehr ([email protected]) factis research GmbH, Freiburg im Breisgau 17. Juli 2013 Developer MeetUp Freiburg Funktionale
Tag 8. Beispiel: Tabellen formatieren
Tag 8 Beispiel: Tabellen formatieren Am heutigen Tag geht es nicht in erster Linie darum, neue Konzepte einzuführen, sondern wir wollen sehen, was wir mit dem bereits Erlernten schon erreichen können.
5.1 Mehr Basistypen. (Wie viele Werte kann man mit n Bit darstellen?)
5.1 Mehr Basistypen Außer int, stellt Java weitere Basistypen zur Verfügung. Zu jedem Basistyp gibt es eine Menge möglicher Werte. Jeder Wert eines Basistyps benötigt die gleiche Menge Platz, um ihn im
expr :: Expr expr = Mul (Add (Const 3) (Const 4)) (Div (Sub (Const 73) (Const 37)) (Const 6))
1 - Korrektur 2 - Abstrakte Datentypen für arithmetische Ausdrücke Der Datentyp Wir beginnen zunächst mit dem algebraischen Datentyp für Ausdrücke. Hierfür definieren wir einen Konstruktor Number für Zahlen,
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?
Zusammenfassung: Programmieren 2 (C#)
Zusammenfassung: Programmieren 2 (C#) Arrays Eindimensional int[] feld; feld = new int[2]; int[] feld2 = new int[3]; int[] feld3 = new int[] 1, 2, 3 ; //oder int[] feld4 = 1, 2, 3 ; int laenge = feld3.length;
C++ Teil 9. Sven Groß. 17. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil Juni / 17
C++ Teil 9 Sven Groß 17. Juni 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 9 17. Juni 2016 1 / 17 Themen der letzten Vorlesung Objektorientierung und Klassen Attribute / Datenelemente Methoden / Elementfunktionen
Tag 7. Pattern Matching und eigene Datentypen
Tag 7 Pattern Matching und eigene Datentypen Heute werden wir eine Technik kennenlernen, die dafür sorgt, daß wir sehr viel übersichtlichere und kürzere Programme schreiben können. Als Überleitung auf
Praktische Informatik 3: Funktionale Programmierung Vorlesung 5 vom : Funktionen Höherer Ordnung I
Rev. 2766 1 [33] Praktische Informatik 3: Funktionale Programmierung Vorlesung 5 vom 11.11.2014: Funktionen Höherer Ordnung I Christoph Lüth Universität Bremen Wintersemester 2014/15 2 [33] Fahrplan Teil
Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe
Aufgabenstellung Für eine Hausverwaltung sollen für maximal 500 Wohnungen Informationen gespeichert werden, die alle nach der gleichen Weise wie folgt strukturiert sind: Art Baujahr Wohnung Whnginfo Nebenkosten
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
Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2014/2015 Wirtschaftsingenieur Bachelor 4. Aufgabe Datenstruktur, Dateieingabe und -ausgabe
Aufgabenstellung Für ein Baumkataster sollen für maximal 500 Bäume Informationen gespeichert werden, die alle nach der gleichen Weise wie folgt strukturiert sind: Nummer Bauminfo Baumart Hoehe Baum Umfang
Einführung in die Funktionale Programmierung mit Haskell
GHC Typen Funktionen Einführung in die Funktionale Programmierung mit Haskell Erste Schritte, Typen und Funktionen LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität,
Funktionale Programmierung
Funktionale Programmierung Mitschrift von www.kuertz.name Hinweis: Dies ist kein offizielles Script, sondern nur eine private Mitschrift. Die Mitschriften sind teweilse unvollständig, falsch oder inaktuell,
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
Übungen zur Vorlesung Funktionale Programmierung. Wintersemester 2012/2013 Übungsblatt 1
Übungsblatt 1 Installieren Sie die Haskell-Platform (http://www.haskell.org/platform/) auf ihrem Rechner. Stellen Sie zudem sicher, dass ghci zu ihrer Pfadvariablen hinzugefügt wird. Unter Windows nden
Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 15 (Linearer Speicher, Listen, Bäume)
Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 15 (Linearer Speicher, Listen,
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.
Adressen. Praktikum Funktionale Programmierung Organisation und Überblick. Termine. Studienleistung
Adressen Adressen, Termine Studienleistung Praktikum Funktionale Programmierung Organisation und Überblick Dr. David Sabel Büro und Email Raum 216, Robert-Mayer-Str. 11-15 [email protected]
Einführung in die Programmierung für NF MI. Übung 04
Einführung in die Programmierung für NF MI Übung 04 Inhalt Arrays Einführung in Objekte Einführung in die Programmierung für NF Übung 04 2 Arrays Arrays repräsentieren Reihungen von Objekten, z.b. Variablen
Ü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
Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen
Programmieren I Martin Schultheiß Hochschule Darmstadt Wintersemester 2011/2012 1 / 25 Operatoren für elementare Datentypen Bedingte Schleifen 2 / 25 Zuweisungsoperator Die Zuweisung von Werten an Variablen
Selbststudium OOP7 & ALG2 Auftrag
Selbststudium OOP7 & ALG2 Auftrag Kapitel 5.6 1. zu bearbeitende Aufgaben: 5.24 bis 5.30 5.24: Return Method Set entryset() V get(object key) Set keyset() V put(k key, V value) void
Algorithmen und Datenstrukturen
Universität Innsbruck Institut für Informatik Zweite Prüfung 16. Oktober 2008 Algorithmen und Datenstrukturen Name: Matrikelnr: Die Prüfung besteht aus 8 Aufgaben. Die verfügbaren Punkte für jede Aufgabe
VL06: Haskell (Funktionen höherer Ordnung, Currying)
VL06: Haskell (Funktionen höherer Ordnung, Currying) IFM 5.3 Spezielle Methoden der Programmierung Carsten Gips, FH Bielefeld 18.05.2015 Wiederholung Wiederholung Wie können Sie die ersten n Elemente einer
Hochschule Darmstadt Informatik-Praktikum WS 2017/2018 WIng Bachelor 6. Aufgabenblatt Zeiger, verkettete Liste, Dateieingabe und -ausgabe
Aufgabe 6: Häuser verwalten - dynamisch Für ein Schneeräumungsunternehmen soll ein Programm zur Verwaltung von Häuserlisten geschrieben werden. Das Programm soll in der Lage sein, zu einem Haus die wichtigsten
Informatik I. Informatik I. 7.1 Der let-ausdruck. 7.2 Das Graphik-Paket image.ss. 7.3 Fraktale Bilder. Wiederholte Berechnungen: Der let-ausdruck
Informatik I 18. November 2010 7. und eine graphische Anwendung Informatik I 7. und eine graphische Anwendung Jan-Georg Smaus Albert-Ludwigs-Universität Freiburg 7.1 7.2 7.3 18. November 2010 Jan-Georg
Computergrundkenntnisse und Programmieren, WS 07/08, Übung 11: Klassen der Standardbibliothek 2
Computergrundkenntnisse und Programmieren, WS 07/08, Übung 11: Klassen der Standardbibliothek 2 Neben vector ist list die zweite wichtige Containerklasse. Um unsere Kenntnisse von Containerklassen zu erweitern,
Einführung in die Funktionale Programmierung mit Haskell
Einführung in die Funktionale Programmierung mit Haskell Typklassen und Polymorphie LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität, München 23. Mai 2013 Planung Freitag:
Projekt 3 Variablen und Operatoren
Projekt 3 Variablen und Operatoren Praktisch jedes Programm verarbeitet Daten. Um mit Daten programmieren zu können, muss es Möglichkeiten geben, die Daten in einem Programm zu verwalten und zu manipulieren.
Funktionale Programmierung mit C++
Funktionale Programmierung mit C++ Rainer Grimm Softwarearchitekt Partner: Überblick Programmierung in funktionaler Art Warum funktionale Programmierung? Was ist funktionale Programmierung? Charakteristiken
HaskellDB. Datenbank-Features in Haskell. 15.01.2013 Johannes Reiher
HaskellDB Datenbank-Features in Haskell Gliederung Was ist HaskellDB? Installation ORM Funktionsweise Vor- und Nachteile Was ist HaskellDB? Datenbank-Interface-Bibliothek Ursprünglich für Hugs entwickelt
Elementare Datentypen in C++
Elementare Datentypen in C++ bool signed/unsigned char signed/unsigned short int signed/unsigned int signed/unsigned long int (signed/unsigned long long int) float double long double void enum char Der
