Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Nebenläufige Programmierung in Haskell (2) Design

Größe: px
Ab Seite anzeigen:

Download "Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Nebenläufige Programmierung in Haskell (2) Design"

Transkript

1 Übersicht Aktuelle Themen zu Informatik der Systeme: Nebenläufige Programmierung: Praxis und Semantik Nebenläufige Programmierung in Haskell (2) PD Dr. David Sabel 1 Software Transactional Memory Übersicht Logging Beispiele T. kombinieren Philosophen 2 WS 2013/14 Stand der Folien: 28. Januar 2014 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 2/30 Software Transactional Memory in Haskell Design in Haskell von Tim Harris und Simon L. Peyton Jones 2005 eingeführt Implementiert in der Bibliothek Control.Concurrent. Erstes Papier, dass retry und orelse einführt. Trennung von Operationen auf Transaktionsvariablen und normalem IO mithilfe des Typsystems Wie IO-Monade gibt es eine -Monade Transaktionen sind vom Typ a atomically :: a -> IO a überführt eine -Aktion in eine IO-Operation Semantik: Führt die Transaktion atomar aus. Beachte: Es gibt keine Umkehrung vom Typ IO a -> a! Halbwahrheit: unsafeioto :: IO a -> a Da eine Monade ist, kann die do-notation und auch >>=, >> und return verwendet werden. D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 3/30 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 4/30

2 Transaktionsvariablen TVar Transaktionen data TVar a =... newtvar :: a -> (TVar a) Erzeugt eine neue TVar mit Inhalt readtvar :: TVar a -> a Liest den den momentanen Wert einer TVar atomically ( do... Zugriffe auf TVar s... und... pure funktionale Berechnungen writetvar :: TVar a -> a -> () Schreibt einen neuen Wert in die TVar... aber kein IO! newtvario :: TVar a -> a -> IO (TVar a) Erzeugen einer TVar in der IO Monade ) D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 5/30 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 6/30 retry Konflikterkennung: Lokales Logging saldo :: TVar Int 785 retry :: a Bricht die Transaktion ab und startet sie neu Implementierung: Neustart erst dann, wenn sich die Werte von TVars geändert haben Damit wird implizit blockiert! Thread 1 atomically ( do local <- readtvar saldo writetvar saldo (local + 1) ) TVar gelesen geschrieben saldo 7 8 Transaction log Thread 2 atomically ( do local <- readtvar saldo writetvar saldo (local - 3) ) TVar gelesen geschrieben saldo Transaction log Abort & Restart D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 7/30 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 8/30

3 Beispiel: Binäre Semaphore Beispiel: Unbounded Buffer type Semaphore = TVar Bool newsem :: Bool -> IO Semaphore newsem k = newtvario k -- k True/False wait :: Semaphore -> () wait sem = do b <- readtvar sem if b then writetvar sem False else retry signal :: Semaphore -> () signal sem = writetvar sem True type Buffer a = TVar [a] newbuffer :: IO (Buffer a) newbuffer = newtvario [] put :: Buffer a -> a -> () put buffer item = do ls <- readtvar buffer writetvar buffer (ls ++ [item]) get :: Buffer a -> a get buffer = do ls <- readtvar buffer case ls of [] -> retry (item:rest) -> do writetvar buffer rest return item D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 9/30 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 10/30 MVar innerhalb von implementieren MVar innerhalb von implementieren(2) takemvar-operation: type MVar a = TVar (Maybe a) MVar erzeugen: newemptymvar :: (MVar a) newemptymvar = newtvar Nothing takemvar :: MVar a -> a takemvar mv = do v <- readtvar mv case v of Nothing -> retry Just val -> do writetvar mv Nothing return val D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 11/30 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 12/30

4 MVar innerhalb von implementieren(3) Transaktionen kombinieren putmvar-operation: putmvar :: MVar a -> a -> () putmvar mv val = do v <- readtvar mv case v of Nothing -> writetvar mv (Just val) Just val -> retry >>=, >>, do erstellen aus Transaktionen zusammengesetzte Sequenzen. Beispiel: swapmvar :: MVar a -> b -> a swapmvar mv val = do res <- takemvar mv putmvar val return res swapmvar wird atomar ausgeführt, da es eine Transaktion ist. D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 13/30 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 14/30 Transaktionen kombinieren: Auswahl Nochmal zur MVar-Implementierung orelse :: a -> a -> a Kombiniert zwei Transaktion zu einer Wenn die erste Transaktion erfolgreich ist, dann auch die kombinierte Wenn die erste Transaktion ein retry durchführt, dann wird die zweite Transaktion durchgeführt. Wenn beide Transaktionen ein retry durchführen, so wird die gesamte Transaktion neu gestartet. Nichtblockierendes putmvar tryputmvar :: MVar a -> a -> Bool tryputmvar mv val = ( do putmvar mv val return True ) orelse (return False) D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 15/30 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 16/30

5 orelse erweitern Speisende Philosophen in Aufbauend auf dem binären orelse kann man problemlos neue Kombinatoren definieren. merge :: [ a] -> a merge transactions = foldl1 orelse transactions foldl1 op [x] = x foldl1 op (x:xs) = x op (foldl e op xs) merge [t1,...,tn] ergibt (t1 orelse (t2 orelse (t3 orelse... ())) Die erste erfolgreich durchgeführte Transaktion bestimmt das Ergebnis. von Josef Svenningsson simulation n = do forks <- sequence (replicate n (newsem True)) outputbuffer <- newbuffer sequence_ [forkio (philosoph i outputbuffer (forks!!i) (forks!!((i+1) mod n))) i <- [0..n-1]] output outputbuffer output buffer = do str <- atomically $ get buffer putstrln str output buffer D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 17/30 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 18/30 Speisende Philosophen in (2) Eigenschaften von Haskells philosoph :: Int->Buffer String->Semaphore->Semaphore->IO () philosoph n out fork1 fork2 = do atomically $ put out ("Philosoph " ++ show n ++ " denkt.") atomically $ do wait fork1 wait fork2 atomically $ put out ("Philosoph " ++ show n ++ " isst.") atomically $ do signal fork1 signal fork2 philosoph n out fork1 fork2 Isolation: Strong (kein Zugriff auf Transaktionsvariablen außerhalb von Transaktionen) Granularität: Wortbasiert Update: Verzögert (Neue Werte werden ins Log geschrieben, erst beim commit in den Speicher) Concurrency Control: optimistisch (meint keine Locks auf die Speicherplätze) Synchronisation: Blockierend Conflict Detection: Late (erst beim commit) Nested Transaction: Nein (durch Typsystem verhindert) D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 19/30 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 20/30

6 (2) Ideen bei : Werte Ausdrücke parallel aus In der reinen funktionalen Sprache Nicht in der IO-Monade Richtig, wenn der Wert der Ausdrücke sowieso gebraucht wird In der Bibliothek Control.Parallel: par :: a -> b -> b pseq :: a -> b -> b par erwartet zwei Argumente (par a b) Zeigt dem Laufzeitsystem an: Während b ausgewertet wird, darf a parallel ausgewertet werden Semantik: par a b = b! Laufzeitsystem darf a auswerten, muss aber nicht. Laufzeitsystem legt keinen Thread für a an, sondern einen Spark Sparks werden in eine FIFO-Queue abgelegt. Wenn ein Prozessor ungenutzt ist, wird nächster Spark dort abgearbeitet Ähnlichkeiten zu lazy futures D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 21/30 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 22/30 Parallelisieren Parallelisieren Beispiel let x = fib 100; y=fak 35 in par x (y+x) Compiler darf die Auswertung umstellen: (x+y) statt (y+x) Keine Parallelisierung! Lösung: pseq a b: Werte erst a aus, danach b let x = fib 100; y=fak 35 in par x (pseq y (y+x)) Beispiel let x = fib 100; y=fak 35 in par x (y+x) Compiler darf die Auswertung umstellen: (x+y) statt (y+x) Keine Parallelisierung! Lösung: pseq a b: Werte erst a aus, danach b let x = fib 100; y=fak 35 in par x (pseq y (y+x)) D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 23/30 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 24/30

7 Fibonacci-Zahlen berechnen Verzögerte Auswertung import Control.Parallel nfib :: Int -> Int nfib n n <= 1 = 1 otherwise = par n1 (pseq n2 (n1 + n2 + 1)) where n1 = nfib (n-1) n2 = nfib (n-2) Beachte: Ohne pseq wird nicht genügend parallelisiert: Beispiel Die verzögerte Auswertung führt oft dazu, dass weniger parallel berechnet wird, als der Programmierer annimmt. let x = map (+1) [ ] in par x s map (+1) [ ] wird ausgewertet zu (1+1):(map (+1) [ ] aber nicht weiter! Auswertung nur bis zur schwachen Kopfnormalform (WHNF)! D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 25/30 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 26/30 Strategien Komplexere Strategien type Strategy a = a -> () class NFData a where rnf :: Strategy a Strategie rnone: keine Auswertung rnone :: Strategy a rnone = () Strategie rwhnf: Auswertung bis zur WHNF: rwhnf :: Strategy a rwhnf a = pseq a () instance NFData a => NFData [a] where rnf [] = () rnf (x:xs) = rnf x pseq rnf xs Anwenden einer Strategie: using :: a -> Strategy a -> a using x s = (s x) pseq x D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 27/30 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 28/30

8 Beispiel: Quicksort Datenorientierter Parallelismus quicksort [] = [] quicksort (x:xs) = low ++ (x:high) using strategy where low = quicksort [y y <- xs, y < x] high = quicksort [y y <- xs, y >= x] strategy result = (rnf low) par (rnf high) par (rnf result) Strategie parallel auf eine Liste anwenden: parlist :: Strategy a -> Strategy [a] parlist strat [] = () parlist strat (x:xs) = strat x par (parlist strat xs) Paralleles map parmap :: Strategy b -> (a -> b) -> [a] -> [b] parmap strat f xs = map f xs using parlist strat D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 29/30 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 30/30

Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Nebenläufige Programmierung in Haskell (2) Software Transactional Memory in Haskell

Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Nebenläufige Programmierung in Haskell (2) Software Transactional Memory in Haskell Stand der Folien: 24. Januar 2012 Übersicht Aktuelle Themen zu Informatik der Systeme: Nebenläufige Programmierung: Praxis und Semantik Nebenläufige Programmierung in Haskell (2) 1 Software Transactional

Mehr

Lock-freies nebenläufiges Programmieren durch Software Transactional Memory

Lock-freies nebenläufiges Programmieren durch Software Transactional Memory Lock-freies nebenläufiges Programmieren durch Software Transactional Memory David Sabel Goethe-Universität, Frankfurt am Main 10. Juni 2013 Stand der Folien: Motivation Parallele, nebenläufige und verteilte

Mehr

Programmtransformationen und Induktion in funktionalen Programmen

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

Mehr

Praktikum Funktionale Programmierung Organisation und Überblick

Praktikum Funktionale Programmierung Organisation und Überblick Praktikum Funktionale Programmierung Organisation und Überblick Dr. David Sabel Sommersemester 2013 Stand der Folien: SoSe 2013 Adressen Organisatorisches Software Projekt Adressen, Termine Studienleistung

Mehr

Funktionale Programmierung

Funktionale Programmierung Parallele LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität, München 4. Juni 2009 Grundlagen Paralleles Rechnen ermöglicht eine schnellere Ausführung von Programmen durch

Mehr

Adressen. Praktikum Funktionale Programmierung Organisation und Überblick. Termine WWW

Adressen. Praktikum Funktionale Programmierung Organisation und Überblick. Termine WWW Adressen Adressen, Termine Studienleistung Praktikum Funktionale Programmierung Organisation und Überblick Dr. David Sabel Büro und Email Raum 216, Robert-Mayer-Str. 11-15 sabel@ki.informatik.uni-frankfurt.de

Mehr

Nebenläufige Programmierung: Praxis und Semantik

Nebenläufige Programmierung: Praxis und Semantik Stand der Folien: 17. Januar 2012 Aktuelle Themen zu Informatik der Systeme: Nebenläufige Programmierung: Praxis und Semantik Nebenläufige Programmierung in Haskell (1) WS 2011/12 Einführung in Haskell

Mehr

Haskell for Hackers... or why functional programming matters

Haskell for Hackers... or why functional programming matters ... or why functional programming matters Franz Pletz CCC München 27-06-2009 @ GPN8 Fahrplan Ablauf Motivation 1 Ablauf Motivation 2 3 4 Ablauf Ablauf Motivation bei Fragen/Unklarheiten:

Mehr

Praktische Informatik 3

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

Mehr

Adressen. Praktikum Funktionale Programmierung Organisation und Überblick. Termine. Studienleistung

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 sabel@ki.informatik.uni-frankfurt.de

Mehr

Paradigmen der Programmierung

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)]

Mehr

Prüfung Funktionale Programmierung

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

Mehr

Nebenläufige Programmierung in Haskell

Nebenläufige Programmierung in Haskell Kapitel 1 Nebenläufige Programmierung in Haskell 1.1 I/O in Haskell In einer rein funktionalen Programmiersprache mit verzögerter Auswertung wie Haskell sind Seiteneffekte zunächst verboten. Fügt man Seiteneffekte

Mehr

Prüfung Funktionale Programmierung

Prüfung Funktionale Programmierung Hochschule für angewandte Wissenschaften München Fakultät für Informatik und Mathematik Studiengruppe IF, IB, IC Sommersemester 2014 Prüfung Funktionale Programmierung Datum : 16.07.2014, 12:30 Uhr Bearbeitungszeit

Mehr

Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Nebenläufige Programmierung in Haskell (1) Funktionale Programmiersprachen (2)

Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Nebenläufige Programmierung in Haskell (1) Funktionale Programmiersprachen (2) Übersicht Aktuelle Themen zu Informatik der Systeme: Nebenläufige Programmierung: Praxis und Semantik Nebenläufige Programmierung in Haskell (1) PD Dr. David Sabel WS 2013/14 Stand der Folien: 21. Januar

Mehr

Grundlegende Datentypen

Grundlegende Datentypen Grundlegende Datentypen Funktionale Programmierung Prof. Dr. Oliver Braun Letzte Änderung: 22.10.2018 10:53 Grundlegende Datentypen 1/21 Typen in Haskell ist alles streng typisiert Haskell verfügt über

Mehr

Funktionale Programmierung. Monaden. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

Funktionale Programmierung. Monaden. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München Funktionale Programmierung Monaden Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 09.10.2018 06:54 Inhaltsverzeichnis Eine Monade.................................... 2 Vergleich

Mehr

Fortgeschrittene Funktionale Programmierung mit Haskell

Fortgeschrittene Funktionale Programmierung mit Haskell Grundlagen GpH Par Fortgeschrittene Funktionale Programmierung mit Haskell Paralleles Rechnen Steffen Jost LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität, München

Mehr

Stackmaschine; Speicheradressierung

Stackmaschine; Speicheradressierung Stackmaschine; Speicheradressierung Erweiterung um globalen Speicher (Heap, Halde) pro Speicherplatz eine Zahl. Notation ist als Array SP [0..]. Zugriff mittels Adresse (Index): eine Zahl i.a.: Zahlen

Mehr

1 - FortProg ist: [ ] objekt-orientiert; [ ] funktional; [ ] logisch; [ ] manchmal nicht auszuhalten

1 - FortProg ist: [ ] objekt-orientiert; [ ] funktional; [ ] logisch; [ ] manchmal nicht auszuhalten 1 - FortProg ist: [ ] objekt-orientiert; [ ] funktional; [ ] logisch; [ ] manchmal nicht auszuhalten Java-1. a), e) Java-2. --- gestrichen --- Java-3. keine Antwort ist richtig Java-4. a) Java-5. a), b)

Mehr

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

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

Mehr

Multicore-Parallelität in Haskell

Multicore-Parallelität in Haskell Universität Passau Fakultät für Mathematik und Informatik Multicore-Parallelität in Haskell Ausarbeitung im Rahmen des Seminars Multicore-Programmierung Stefan Boxleitner 20. Januar 2011 Betreut von Dr.

Mehr

Praktikum Funktionale Programmierung Teil 3: Abstrakte Maschinen

Praktikum Funktionale Programmierung Teil 3: Abstrakte Maschinen Praktikum Funktionale Programmierung Teil 3: Abstrakte Maschinen Dr. David Sabel Sommersemester 2015 Stand der Folien: SoSe 2015 Übersicht FP-PR Teil 3: Abstrakte Maschinen Sommersemester 2015 D. Sabel

Mehr

Sprachkonzepte der parallelen Programmierung

Sprachkonzepte der parallelen Programmierung Sprachkonzepte der parallelen Programmierung Johannes Waldmann HTWK-FIMN 2. Mai. 2012 Johannes Waldmann (HTWK-FIMN) Sprachkonzepte der parallelen Programmierung 2. Mai. 2012 1 / 17 Die Zukunft ist parallel...

Mehr

Funktionale Programmierung. Monoide. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

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

Mehr

Programmieren in Haskell

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

Mehr

Reaktive Programmierung Vorlesung 13 vom : Software Transactional Memory

Reaktive Programmierung Vorlesung 13 vom : Software Transactional Memory 11:54:31 2017-06-15 1 [37] Reaktive Programmierung Vorlesung 13 vom 14.06.17: Software Transactional Memory Christoph Lüth, Martin Ring Universität Bremen Sommersemester 2017 RP SS 2017 2 [37] Fahrplan

Mehr

Lazy Programming Wintersemester 2003 / 2004

Lazy Programming Wintersemester 2003 / 2004 1/43 Proseminar Programmiersysteme Author Benedikt Grundmann bgrund@ps.uni-sb.de Lazy Programming Wintersemester 2003 / 2004 Betreuer Andreas Rossberg rossberg@ps.uni-sb.de Professor Gert Smolka smolka@ps.uni-sb.de

Mehr

Nebenläufige Programmierung: Praxis und Semantik. Zugriff auf mehrere Ressourcen

Nebenläufige Programmierung: Praxis und Semantik. Zugriff auf mehrere Ressourcen Aktuelle Themen zu Informatik der Systeme: Nebenläufige Programmierung: Praxis und Semantik Zugriff auf mehrere Ressourcen WS 2009/10 Deadlocks bei mehreren Ressourcen Transactional Memory Übersicht 1

Mehr

Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Zugriff auf mehrere Ressourcen. Deadlocks bei mehreren Ressourcen

Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Zugriff auf mehrere Ressourcen. Deadlocks bei mehreren Ressourcen Stand der Folien: 20. Dezember 2011 Deadlocks bei mehreren Ressourcen Übersicht Transactional Memory Aktuelle Themen zu Informatik der Systeme: Nebenläufige Programmierung: Praxis und Semantik Zugriff

Mehr

Programmieren in Haskell

Programmieren in Haskell Programmieren in Haskell Wir steigen ein... Programmieren in Haskell 1 Was wir heute machen Umfrage: Wer hat den Hugs ausprobiert? Ausdrücke und Werte Datentypen Funktionen Aufgabe für diese Woche Programmieren

Mehr

Motivation Von Funktoren, Komposition, Applikation Zu Monoiden Die Monade Zusammenfassung. Monaden für alle. Franz Pletz

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

Mehr

Monoide. Funktionale Programmierung. Prof. Dr. Oliver Braun Letzte Änderung: :54. Monoide 1/16

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

Mehr

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 15 (Linearer Speicher, Listen, Bäume)

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,

Mehr

Funktionale Programmierung ALP I. Funktionen höherer Ordnung SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Funktionale Programmierung ALP I. Funktionen höherer Ordnung SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda ALP I SS 2011 Funktionstypen Funktionen haben einen Datentyp, der folgende allgemeine Form hat: functionname :: T 1 -> T 2, wobei T 1, T 2 wiederum beliebige Datentypen sind Beispiel: T 1 T 2 Der Datentyp

Mehr

Programmieren in Haskell

Programmieren in Haskell Programmieren in Haskell Wir steigen ein... Programmieren in Haskell 1 Was wir heute machen Umfrage: Wer hat den Hugs ausprobiert? Ausdrücke und Werte Datentypen Funktionen Aufgabe für s Wochenende Programmieren

Mehr

Unendliche Listen und Bäume

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

Mehr

Concurrent Haskell with Futures. Vorlesung SAFP, WS 2017/18

Concurrent Haskell with Futures. Vorlesung SAFP, WS 2017/18 Concurrent Haskell with Futures Vorlesung SAFP, WS 2017/18 Stand der Folien: 8. Februar 2018 Übersicht Der CHF-Kalkül 1 Der CHF-Kalkül Syntax Typisierung Semantik Gleichheit EFP SAFP Vorlesung SAFP, WS

Mehr

Funktionale Programmierung Mehr funktionale Muster

Funktionale Programmierung Mehr funktionale Muster Mehr funktionale Muster Prof. Dr. Oliver Braun Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 07.12.2017 06:56 Inhaltsverzeichnis Pattern Matching..................................

Mehr

Einführung in Haskell

Einführung in Haskell Einführung in Haskell Axel Stronzik 21. April 2008 1 / 43 Inhaltsverzeichnis 1 Allgemeines 2 / 43 Inhaltsverzeichnis 1 Allgemeines 2 Funktions- und Typdefinitionen 2 / 43 Inhaltsverzeichnis 1 Allgemeines

Mehr

Berechnungsschemata: Funktion als Parameter abstrahiert Operation im Schema, wird bei Aufruf des Schemas konkretisiert

Berechnungsschemata: Funktion als Parameter abstrahiert Operation im Schema, wird bei Aufruf des Schemas konkretisiert 6. Funktionen als Daten, Übersicht Orthogonales Typsystem: Funktionen sind beliebig mit anderen Typen kombinierbar Notation für Funktionswerte (Lambda-Ausdruck): fn (z,k) => z*k Datenstrukturen mit Funktionen

Mehr

Anwendung (2. Versuch:-) Entkopplung der Locks

Anwendung (2. Versuch:-) Entkopplung der Locks Gut gemeint aber leider fehlerhaft... Jeder Producer benötigt zwei Locks gleichzeitig, um zu produzieren: 1. dasjenige für den Puffer; 2. dasjenige für einen Semaphor. Musser fürden Semaphor einwait()

Mehr

Haskell für Mathematiker

Haskell für Mathematiker Haskell für Mathematiker Joachim Breitner AG Seminar Topology 12. Mai 2016, Karlsruhe LEHRSTUHL PROGRAMMIERPARADIGMEN 1 KIT 19.2.2016 University of the Joachim State ofbreitner Baden-Wuerttemberg - Haskell

Mehr

Praktikum Funktionale Programmierung Teil 2: Typecheck und Transformation

Praktikum Funktionale Programmierung Teil 2: Typecheck und Transformation Praktikum Funktionale Programmierung Teil 2: Typecheck und Transformation Dr. David Sabel Sommersemester 2015 Stand der Folien: SoSe 2015 Übersicht FP-PR Teil 2: Typecheck und Transformation Sommersemester

Mehr

Grundlegende Datentypen

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

Mehr

Programmieren in Haskell Einstieg in Haskell

Programmieren in Haskell Einstieg in Haskell Programmieren in Haskell Einstieg in Haskell Peter Steffen Universität Bielefeld Technische Fakultät 24.10.2008 1 Programmieren in Haskell Was wir heute machen Umfrage: Wer hat den Hugs ausprobiert? Ausdrücke

Mehr

Ströme als unendliche Listen in Haskell

Ströme als unendliche Listen in Haskell Ströme als unendliche Listen in Haskell Strom := Folge oder Liste von Daten, unbegrenzt viele Daten-Elemente. Ströme sind in Haskell als als (potentiell) unendliche Listen darstellbar und programmierbar

Mehr

Grundlagen der Programmierung 2. Unendliche Listen und Ströme(B)

Grundlagen der Programmierung 2. Unendliche Listen und Ströme(B) Grundlagen der Programmierung 2 Unendliche Listen und Ströme(B) Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 17. Mai 2006 Beispiel: scanl, scanr scanl berechnet das foldl

Mehr

Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Synchronisation (4) Eine untere Schranke für den Platzbedarf

Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Synchronisation (4) Eine untere Schranke für den Platzbedarf Übersicht Komplexitätsresultate Aktuelle Themen zu Informatik der Systeme: Nebenläufige Programmierung: Praxis und Semantik Synchronisation (4) Drei Komplexitätsresultate Eine genaue Schranke für den Platzbedarf

Mehr

Informatik-Seminar Thema: Monaden (Kapitel 10)

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

Mehr

Grundlegende Datentypen

Grundlegende Datentypen Grundlegende Datentypen (Funktionale Programmierung) Prof. Dr. Oliver Braun Letzte Änderung: 18.03.2018 21:08 Grundlegende Datentypen 1/16 Typen in Haskell ist alles streng typisiert Haskell verfügt über

Mehr

Funktionale Programmiersprachen

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

Mehr

WS 2011/2012. Georg Sauthoff November 2011

WS 2011/2012. Georg Sauthoff November 2011 WS 2011/2012 Georg 1 AG Praktische Informatik 22. November 2011 1 gsauthof@techfak.uni-bielefeld.de Vorstellung der abgaben aus den Tutorien. Sieb-Beispiel Siehe Tafel (Auswertungsbeispiel) Sieb-Beispiel

Mehr

Funktionale Programmierung

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

Mehr

Funktionale Programmierung

Funktionale Programmierung Funktionale Programmierung Jörg Kreiker Uni Kassel und SMA Solar Technology AG Wintersemester 2011/2012 2 Teil II Typen mit Werten und Ausdruck, sogar listenweise 3 Haskell Programme Programm Module ein

Mehr

Funktionale Programmierung mit Haskell

Funktionale Programmierung mit Haskell Funktionale Programmierung mit Haskell Dr. Michael Savorić Hohenstaufen-Gymnasium (HSG) Kaiserslautern Version 20120622 Überblick Wichtige Eigenschaften Einführungsbeispiele Listenerzeugung und Beispiel

Mehr

Frank eine Programmiersprache mit Effekten

Frank eine Programmiersprache mit Effekten Frank eine Programmiersprache mit Effekten Tim Baumann Curry Club Augsburg 23. Februar 2017 1 / 30 Paper: GitHub: Do Be Do Be Do von Sam Lindley, Conor McBride und Craig McLaughlin https://github.com/cmcl/frankjnr

Mehr

Inhalt Kapitel 5: Funktionen höherer Ordnung

Inhalt Kapitel 5: Funktionen höherer Ordnung Inhalt Kapitel 5: 1 Funktionen als Argumente 2 Funktionen als Werte einer Funktion 3 Currying 4 Grundlegende 88 Funktionen als Argumente Funktionen als Argumente: map Anwenden einer Funktion auf alle Einträge

Mehr

ROGER GILLIAR / MCS GMBH HASKELL FÜR JAVA PROGRAMMIERER

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

Mehr

Parallelität und Nebenläufigkeit mit Haskell 1 / 68

Parallelität und Nebenläufigkeit mit Haskell 1 / 68 Parallelität und Nebenläufigkeit mit Haskell Stefan Wehr (wehr@factisresearch.com) factis research GmbH, Freiburg im Breisgau 16. Mai 2013 parallel2013, Karlsruhe Parallelität und Nebenläufigkeit mit Haskell

Mehr

Übungsblatt zu Haskell

Übungsblatt zu Haskell Zweiter Haskell-Workshop im OpenLab Augsburg github.com/curry-club-aux/haskell-workshop Übungsblatt zu Haskell Learn You a Haskell for Great Good! 1 Mehr zu Monaden Aufgabe 1. Umgekehrte polnische Notation

Mehr

Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung

Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung Gliederung n Teil I: Einleitung und Grundbegriffe l 1. Organisatorisches l 2. Grundlagen von Programmiersprachen n Teil II: Imperative und objektorientierte Programmierung l 1. Grundelemente der Programmierung

Mehr

Wir betrachten noch einmal den Datentyp für blattbeschriftete Binärbäume

Wir betrachten noch einmal den Datentyp für blattbeschriftete Binärbäume Zustandsmonaden Wir betrachten noch einmal den Datentyp für blattbeschriftete Binärbäume data Tree a = L a Tree a :+: Tree a und wollen eine Funktion definieren, die die Knoten so eines Baums von links

Mehr

Funktionale Programmierung Grundlegende Datentypen

Funktionale Programmierung Grundlegende Datentypen Grundlegende Datentypen Prof. Dr. Oliver Braun Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 06.11.2017 16:45 Inhaltsverzeichnis Typen........................................

Mehr

Software Transactional Memory

Software Transactional Memory Software-Architektur Software Transactional Memory Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 11.07.2017 15:12 Inhaltsverzeichnis Transaktionaler Speicher..............................

Mehr

Programmiersprachen im Multicore-Zeitalter: Haskell

Programmiersprachen im Multicore-Zeitalter: Haskell Programmiersprachen im Multicore-Zeitalter: Haskell Colin Benner 30. Januar 2012 1 Einführung Mit der ständig wachsenden Anzahl verfügbarer Prozessor-Kerne wird das Schreiben paralleler Programme immer

Mehr

Geheimnisprinzip: (information hiding principle, Parnas 1972)

Geheimnisprinzip: (information hiding principle, Parnas 1972) 2. Abstrakte Datentypen 2.0 Begriffe Geheimnisprinzip: (information hiding principle, Parnas 1972) Zugriffe auf Teile einer Programmeinheit, die für die reguläre Benutzung nicht erforderlich sind, sollten

Mehr

Kommerzielle Softwareentwicklung mit Haskell

Kommerzielle Softwareentwicklung mit Haskell Kommerzielle Softwareentwicklung mit Haskell Ein Erfahrungsbericht Stefan Wehr factis research GmbH, Freiburg im Breisgau 7. Oktober 2011, Hal6 in Leipzig Viele Fragen Wer sind wir? Wer bin ich? Wie setzen

Mehr

ALP I. Funktionale Programmierung

ALP I. Funktionale Programmierung ALP I Funktionale Programmierung Zusammengesetzte Datentypen in Haskell WS 2012/2013 Zusammengesetzte Datentypen Tupel List String Zusammengesetzte Datentypen Tupel-Datentyp Ein Tupel ist eine Ansammlung

Mehr

Funktionale Programmierung. Das Funktionale Quiz. Das Funktionale Quiz. Das Funktionale Quiz

Funktionale Programmierung. Das Funktionale Quiz. Das Funktionale Quiz. Das Funktionale Quiz Funktionale Programmierung Das Funktionale Quiz 31.5.2005 Nenne eine Gemeinsamkeit zwischen Typklassen und OO-Klassen Das Funktionale Quiz Das Funktionale Quiz Nenne einen Unterschied zwischen Typklassen

Mehr

Funktionale Programmierung

Funktionale Programmierung Schleifen 1 Funktionale Programmierung Jörg Kreiker Uni Kassel und SMA Solar Technology AG Wintersemester 2011/2012 3 Teil I Jedem Anfang wohnt ein Zauber inne 4 Über mich Diplom in Informatik in Saarbrücken

Mehr

Workshop Einführung in die Sprache Haskell

Workshop Einführung in die Sprache Haskell Workshop Einführung in die Sprache Haskell Nils Rexin, Marcellus Siegburg und Alexander Bau Fakultät für Informatik, Mathematik und Naturwissenschaften Hochschule für Technik, Wirtschaft und Kultur Leipzig

Mehr

Programmierung und Modellierung mit Haskell

Programmierung und Modellierung mit Haskell Grundlagen Par-Monade Programmierung und Modellierung mit Haskell Parallele Auswertung Martin Hofmann Steffen Jost LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität,

Mehr

Praktische Informatik 3: Funktionale Programmierung Vorlesung 6 vom : Funktionen Höherer Ordnung II und Effizienzaspekte

Praktische Informatik 3: Funktionale Programmierung Vorlesung 6 vom : Funktionen Höherer Ordnung II und Effizienzaspekte 16:02:08 2017-01-17 1 [34] Praktische Informatik 3: Funktionale Programmierung Vorlesung 6 vom 22.11.2016: Funktionen Höherer Ordnung II und Effizienzaspekte Christoph Lüth Universität Bremen Wintersemester

Mehr

Einführung in die Informatik 2

Einführung in die Informatik 2 Technische Universität München Fakultät für Informatik Prof. Tobias Nipkow, Ph.D. Lars Hupel, Lars Noschinski, Dr. Jasmin Blanchette Wintersemester 2013/14 Abschlussklausur 21. Februar 2014 Einführung

Mehr

- Welche konkreten Invarianten müssen gelten? Berücksichtigen: Invarianten aus Modell und Implem.

- Welche konkreten Invarianten müssen gelten? Berücksichtigen: Invarianten aus Modell und Implem. 234 Implementierung von Abstrakten Datentypen und Korrektheitskriterien Ziel: Zusammenhang zwischen Spezifikation (Modell!) und Implementierung(en) herstellen Spezifikation Implementierung abstraktes Modell?

Mehr

Memory Models Frederik Zipp

Memory Models Frederik Zipp Memory Models Frederik Zipp Seminar: Programmiersprachen für Parallele Programmierung (SS 2010) Fakultät für Informatik - IPD SNELTING LEHRSTUHL PROGRAMMIERPARADIGMEN 1

Mehr

Programmieren in Haskell

Programmieren in Haskell Programmieren in Haskell Syntax und Semantik von Haskell Programmieren in Haskell 1 Was wir heute (und nächstes mal) machen Datentypdefinitionen Wertdefinitionen, Variablenbindungen Musterbindungen Funktionsbindungen

Mehr

Basiskonstrukte von Haskell

Basiskonstrukte von Haskell Basiskonstrukte von Haskell PD Dr. David Sabel Goethe-Universität Frankfurt am Main 29. September 2015 Basistypen und Operationen Ganzzahlen: Int = Ganzzahlen beschränkter Länge Integer = Ganzzahlen beliebiger

Mehr

Typ-Polymorphismus. November 12, 2014

Typ-Polymorphismus. November 12, 2014 Typ-Polymorphismus Universität Bielefeld AG Praktische Informatik November 12, 2014 Das Haskell Typ-System Wir beginnen mit einer Wiederholung des Bekannten: In allen Programmiersprachen sind Typ-Konzepte

Mehr

Einführung in die Informatik 2

Einführung in die Informatik 2 Technische Universität München Fakultät für Informatik Prof. Tobias Nipkow, Ph.D. Lars Noschinski, Dr. Jasmin Blanchette, Dmitriy Traytel Wintersemester 2012/13 Lösungsblatt Endklausur 9. Februar 2013

Mehr

Typklassen. Natascha Widder

Typklassen. Natascha Widder Typklassen Natascha Widder 19.11.2007 Motivation Typklassen fassen Typen mit ähnlichen Operatoren zusammen ermöglichen überladenen Funktionen Definition Typklassen Deklarationsschema class Name Platzhalter

Mehr

2.2.1 Algebraische Spezifikation (Fortsetzung)

2.2.1 Algebraische Spezifikation (Fortsetzung) 2.2.1 Algebraische Spezifikation (Fortsetzung) Algebraische Spezifikation: Mengen Types Set, Bool, t Signature > creates :: Eq t => Set t > isempty :: Eq t => Set t -> Bool > insert :: Eq t => t -> Set

Mehr

Haskell im harten Alltag

Haskell im harten Alltag Haskell im harten Alltag Stefan Wehr (wehr@cp-med.com) Twitter: @skogsbaer factis research GmbH 20. Juni 2014 Haskell im harten Alltag 1 / 39 Wer bin ich? Was machen wir? Haskell Benutzer seit 2003 Zunächst

Mehr

INFORMATIK FÜR BIOLOGEN

INFORMATIK FÜR BIOLOGEN Technische Universität Dresden 15012015 Institut für Theoretische Informatik Professur für Automatentheorie INFORMATIK FÜR BIOLOGEN Musterklausur WS 2014/15 Studiengang Biologie und Molekulare Biotechnologie

Mehr

Kapitel 3: Eine einfache Programmiersprache. Programmieren in Haskell 1

Kapitel 3: Eine einfache Programmiersprache. Programmieren in Haskell 1 Kapitel 3: Eine einfache Programmiersprache Programmieren in Haskell 1 Datentypen, Datentypdefinitionen data Instrument = Oboe HonkyTonkPiano Cello VoiceAahs data Musik = Note Ton Dauer Pause Dauer Musik

Mehr

Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zur Übungsklausur -

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

Mehr

WS 2011/2012. RobertGiegerich. November 12, 2013

WS 2011/2012. RobertGiegerich. November 12, 2013 WS 2011/2012 Robert AG Praktische Informatik November 12, 2013 Haskell-Syntax: Ergänzungen Es gibt noch etwas bequeme Notation für Fallunterscheidungen, die wir bisher nicht benutzt haben. Bisher kennen

Mehr

1. Probeklausur (Lösung) zu Programmierung 1 (WS 07/08)

1. Probeklausur (Lösung) zu Programmierung 1 (WS 07/08) Fachschaft Informatikstudiengänge Fachrichtung 6.2 Informatik Das Team der Bremser 1. Probeklausur (Lösung) zu Programmierung 1 (WS 07/08) http://fsinfo.cs.uni-sb.de Name Matrikelnummer Bitte öffnen Sie

Mehr

Typklassen, Eingabe und Monaden In Haskell

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

Mehr

Nebenläufige Programme mit Python

Nebenläufige Programme mit Python Nebenläufige Programme mit Python PyCon DE 2012 Stefan Schwarzer, SSchwarzer.com info@sschwarzer.com Leipzig, Deutschland, 2012-10-30 Nebenläufige Programme mit Python Stefan Schwarzer, info@sschwarzer.com

Mehr

WS 2011/2012. RobertGiegerich. November 12, 2013

WS 2011/2012. RobertGiegerich. November 12, 2013 WS 2011/2012 Robert AG Praktische Informatik November 12, 2013 Haskell-Syntax: Ergänzungen Es gibt noch etwas bequeme Notation für Fallunterscheidungen, die wir bisher nicht benutzt haben. Bisher kennen

Mehr

Induktion nach der Länge n von x

Induktion nach der Länge n von x Allgemeiner: app (rev x) y = rev1 x y füralle Listenx, y. Beweis: n = 0 : Induktion nach der Länge n von x Dann gilt: x = []. Wirschließen: app (rev x) y = app (rev []) y = app (match [] with [] -> []...)

Mehr

Programmierung und Modellierung

Programmierung und Modellierung Programmierung und Modellierung Funktionen höherer Ordnung Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 Inhalt Kap. 6 Funktionen höherer Ordnung 1. Funktionen als Parameter und Wert von

Mehr

Einführung in die Informatik 2

Einführung in die Informatik 2 Technische Universität München Fakultät für Informatik Prof. Tobias Nipkow, Ph.D. Manuel Eberl, Lars Hupel, Lars Noschinski Wintersemester 2014/15 Lösungsblatt Endklausur 13. Februar 2015 Einführung in

Mehr

Einführung in die Informatik 2

Einführung in die Informatik 2 Technische Universität München Fakultät für Informatik Prof. Tobias Nipkow, Ph.D. Lars Hupel, Lars Noschinski, Dr. Jasmin Blanchette Wintersemester 2013/14 Wiederholungsklausur 24. März 2014 Einführung

Mehr

1 Funktionale vs. Imperative Programmierung

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

Mehr

WS 2012/2013. Robert Giegerich. 21. November 2012

WS 2012/2013. Robert Giegerich. 21. November 2012 WS 2012/2013 Robert AG Praktische Informatik 21. November 2012 Funktionen als Bürger erster Klasse Funktionen definieren kann man in jeder Programmiersprache. Eine funktionalen Programmiersprache erlaubt

Mehr