Folien

Werbung
Schleifen
1
Funktionale Programmierung
Jörg Kreiker
Uni Kassel und SMA Solar Technology AG
Wintersemester 2011/2012
2
Teil I
Jedem Anfang wohnt ein Zauber
inne
3
Über mich
• Diplom in Informatik in Saarbrücken
2001
• Promotion in Informatik in
Saarbrücken 2006
• Habilitation in Informatik an der TU
München 2011
• Heute
• Systemarchitekt bei SMA Solar
Technology
• Lehrbeauftrageter und PD an der
Uni Kassel am LS Formale
Methoden und
Softwareverifikation (Lange)
• joerg.kreiker@{sma.de,
uni-kassel.de}
4
Ort und Zeit
• Vorlesung: montags, 16-18 Uhr, Hörsaal 0446
• Vortrag
• Interaktion
• Live Programmierung
• Übung: montags, 18-20 Uhr, Raum, Raum 1201
• Wildes Programmieren
• Online Aufgaben
• Übungsblätter
• Pausen nach Bedarf
5
Prüfung
1. Praxis: Projekte
• Interpreter (10 Punkte)
• Schach (10 Punkte)
2. Theorie: 20 Punkte, mündliche oder schriftliche Prüfung nach
Bedarf
6
Noten
Σ Punkte
[0, 5)
[5, 11)
[11, 17)
[17, 19]
(19, 22]
(22, 24]
(24, 26]
(26, 28]
(28, 30]
(30, 32]
(32, 34]
(34, 36]
(36, 40]
Note
5,0
4,7
4,3
4,0
3,7
3,3
3,0
2,7
2,3
2,0
1,7
1,3
1,0
7
Material
• Webseiten
• haskell.org
• realworldhaskell.org mit gratis Onlinebuch
• Noch ein Buch:
http://www.cs.brown.edu/ sk/Publications/Books/ProgLangs
• Artikel, leicht findbar im Web
• J. Hudak, J. Peterson, J.H. Fasel. A Gentle Introduction to
Haskell 98.
• Simon Peyton Jones. Haskell: The Revised Report.
• Philip Wadler. Monads for functional programming.
• S.P. Jones, A. Gordon, S. Finne. Concurrent Haskell.
• History of Haskell
• Slides, Beispielprogramme, Beispiellösungen auf Kurswebseite:
http://cms.uni-kassel.de/unicms/index.php?id=38132
8
Interpreter und Compiler
• GHC runterladen von haskell.org
• Entwicklungsumgebung nach Wahl
• Im Rechnerpool installiert
9
Merkwürdiges
1. Interaktion: unterbrecht mich, fragt, antwortet
2. Summabstimmung
3. Klassenfahrt zu SMA im Februar
4. Feedback
10
STOP
11
Abstimmung
• Wer hat schon funktional programmiert?
• Lieblingssprache?
• Implementiert
• Startwitz
• Fakultätsfunktion
in Eurer Lieblingssprache!
Haskell
13
Haskell
• pure
• funktional
• lazy
14
Deklarative vs. imperative Programmierung
Deklarativ Was?
Imperativ Wie?
15
Coole Features
• Viele Konstrukte aus funktionalen Sprachen im Mainstream
• λ Ausrücke (C#)
• Closures (Java, PHP, Lua, . . . )
• map/reduce (Datenbanken)
• Pattern Matching (Scala)
• Polymorphismus (Generics)
• Funktionen höherer Ordnung
16
Coole Projekte
•
http://www.haskell.org/haskellwiki/Haskell in industry
• detexify
• Google: interne Werkzeuge
• Facebook: lex-pass, Werkzeug zur PHP Code Manipulation
• Andere Firmen: Amgen, ABN Amro, Deutsche Bank, . . .
17
Inhalte
• Abstrakte Datentypen
• Variablen vs. Bezeichner
• Polymorphismus
• Typinferenz
• Monaden
• Call Strategien (by-{value, name, reference, need})
• Zustände
• Laziness
• Software Transactional Memory
18
Lernziele
• Fähigkeit Vorgennantes schnell zu erlernen
• Konzepte, Tricks, Ideen aus funktionaler Programmierung
kennenlernen und adaptieren
• Geeignete Programmiersprachen identifizieren
• Grundlagen von Programmiersprachen
• Anpassungsfähigkeit: Sprachdefinition lesen, verstehen,
erstellen
19
Keine Lernziele
• Haskell Hacker
• GUIs
• Netzwerkprogrammierung
• Spieleprogrammierung
• ...
20
STOP
21
Ausrücke, Werte, Typen
• Im Interpreter schreiben wir Ausdrücke
• Ausdruck wird ausgewertet zu einem Wert
• Jeder Ausdruck und jeder Wert haben einen Typ
• Beispiel
1
True
’a’
1+2
1/0
1.0/2.5
=⇒
1
:: Integer
=⇒ True :: Bool
=⇒ 0 a 0 :: Char
=⇒
3
:: Integer
=⇒
?
:: Integer
=⇒ 0.4 :: Float
Strukturierte Werte und Typen
• Tupel:
• 0 oder ≥ 2 Elemente
• Nicht notwendigerweise gleichen Typs
()
=⇒
()
:: ()
(’a’,True) =⇒ (0 a 0 , True ) :: (Char , Bool )
• Listen:
• ≥ 0 Elemente
• Alle Elemente selber Typ
[1+1,2,3]
=⇒
[2, 2, 3]
[]
=⇒
[]
[[],[2]]
=⇒
[[], [2]]
(1==2) : (2==2) : [] =⇒ [False , True ]
[1,2] ++ [1,2]
=⇒
[1, 2, 1, 2]
::
::
::
::
::
[Integer ]
[a ]
[[Integer ]]
[Bool ]
[Integer ]
23
Bedingte Ausdrücke
• if-then-else Ausdrücke
• if x==1 then 2 else 3 :: Integer
• (if x==1 then 2 else 3) + (if x==0 then 4 else 5)
24
Funktionen
• Funktionen sind Werte
\x -> x + 1
\(x,y) -> x + y
:: Integer → Integer
:: (Integer , Integer ) → Integer
• Funktionen können Funktionen als Resultat haben:
Kaskadierung
\x y -> x + y
:: Integer → Integer → Integer
• Funktionen können Argumente sein: Funktionen höherer
Ordnung
\f x y -> f (x,y)
\f g x -> f (g x)
:: ((α, β) → γ) → α → β → γ
:: (α → β) → (γ → α) → γ → β
25
Rekursion
• Rekursive Funktionen durch Funktionsdefinition deklariert
• Verschiedene Fälle mittels Muster
mult 0 n = 0
mult k n = n + mult (k-1) n
• Verschränkte Rekursion
e = \k ->
o = \k ->
if k==0
else if
if k==0
else if
then
k==1
then
k==1
True
then False else o (k-1)
True
then False else e (k-1)
26
Beispiel
f 1 = 1
f 2 = 1
f n = f (n-1) + f (n-2)
Fibonacci
27
Beispiel
m f [] = []
m f (x:xs) = f x : m f xs
Map
28
STOP
29
Herunterladen