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 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}
5 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
6 Prüfung 1. Praxis: Projekte Interpreter (10 Punkte) Schach (10 Punkte) 2. Theorie: 20 Punkte, mündliche oder schriftliche Prüfung nach Bedarf
7 Noten Σ Punkte Note [0, 5) 5,0 [5, 11) 4,7 [11, 17) 4,3 [17, 19] 4,0 (19, 22] 3,7 (22, 24] 3,3 (24, 26] 3,0 (26, 28] 2,7 (28, 30] 2,3 (30, 32] 2,0 (32, 34] 1,7 (34, 36] 1,3 (36, 40] 1,0
8 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
9 Interpreter und Compiler GHC runterladen von haskell.org Entwicklungsumgebung nach Wahl Im Rechnerpool installiert
10 Merkwürdiges 1. Interaktion: unterbrecht mich, fragt, antwortet 2. Summabstimmung 3. Klassenfahrt zu SMA im Februar 4. Feedback
STOP 11
12 Abstimmung Wer hat schon funktional programmiert? Lieblingssprache? Implementiert Startwitz Fakultätsfunktion in Eurer Lieblingssprache!
Haskell 13
14 Haskell pure funktional lazy
15 Deklarative vs. imperative Programmierung Deklarativ Was? Imperativ Wie?
16 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
17 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,...
18 Inhalte Abstrakte Datentypen Variablen vs. Bezeichner Polymorphismus Typinferenz Monaden Call Strategien (by-{value, name, reference, need}) Zustände Laziness Software Transactional Memory
19 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
20 Keine Lernziele Haskell Hacker GUIs Netzwerkprogrammierung Spieleprogrammierung...
STOP 21
22 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 = 1 :: Integer True = True :: Bool a = a :: Char 1+2 = 3 :: Integer 1/0 =? :: Integer 1.0/2.5 = 0.4 :: Float
23 Strukturierte Werte und Typen Tupel: 0 oder 2 Elemente Nicht notwendigerweise gleichen Typs () = () :: () ( a,true) = ( a, True) :: (Char, Bool) Listen: 0 Elemente Alle Elemente selber Typ [1+1,2,3] = [2, 2, 3] :: [Integer] [] = [] :: [a] [[],[2]] = [[], [2]] :: [[Integer]] (1==2) : (2==2) : [] = [False, True] :: [Bool] [1,2] ++ [1,2] = [1, 2, 1, 2] :: [Integer]
24 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)
25 Funktionen sind Werte Funktionen \x -> x + 1 :: Integer Integer \(x,y) -> x + y :: (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) :: (α β) (γ α) γ β
26 Rekursion Rekursive Funktionen durch Funktionsdefinition deklariert Verschiedene Fälle mittels Muster Verschränkte Rekursion mult 0 n = 0 mult k n = n + mult (k-1) n e = \k -> if k==0 then True else if k==1 then False else o (k-1) o = \k -> if k==0 then True else if k==1 then False else e (k-1)
Beispiel f 1 = 1 f 2 = 1 f n = f (n-1) + f (n-2) Fibonacci
28 Beispiel m f [] = [] m f (x:xs) = f x : m f xs Map
STOP 29