Funktionale Programmierung



Ähnliche Dokumente
Funktionale Programmierung

Funktionale Programmierung mit Haskell

Programmieren in Haskell Einführung

Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie

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

Algorithmen mit Python

Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell):

Einführung in die Programmierung

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

ALP I. Funktionale Programmierung

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

Scala kann auch faul sein

Computeranwendung und Programmierung (CuP)

Funktionale Programmierung (in Clojure)

IT-Basics 2. DI Gerhard Fließ

Grundlagen der Programmierung 2 (1.A)

Modulhandbuch für das BA Kombinationsfach Angewandte Informatik Multimedia

Programmieren Lernen mit BYOB. Gerald Futschek 5. November 2012

Informatik Java-Programmierkurs im Rahmen der Berufs- u. Studienorientierung für Schüler. Joliot-Curie-Gymnasium GR 2010 Nico Steinbach

Übungen Programmieren 1 Felix Rohrer. Übungen

Einführung in die Programmierung

Erwin Grüner

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Beispiele: (Funktionen auf Listen) (3) Bemerkungen: Die Datenstrukturen der Paare (2) Die Datenstrukturen der Paare

Grundlagen der Programmierung 2. Bäume

Algorithmen und Programmieren II Einführung in Python

Einführung in die Programmierung (EPR)

Programmierparadigmen. Programmierparadigmen. Imperatives vs. objektorientiertes Programmieren. Programmierparadigmen. Agenda für heute, 4.

SEMINAR Modifikation für die Nutzung des Community Builders

Java Kurs für Anfänger Einheit 5 Methoden

Graphic Coding. Klausur. 9. Februar Kurs A

Fragen. f [ ] = [ ] f (x : y : ys) = x y : f ys f (x : xs) = f (x : x : xs) Wozu evaluiert f [1, 2, 3] (Abkürzung für f (1 : 2 : 3 : [ ]))?

III.1 Prinzipien der funktionalen Programmierung - 1 -

1. LPC - Lehmanns Programmier Contest - Lehmanns Logo

Tutorium Rechnerorganisation

PHP Kurs Online Kurs Analysten Programmierer Web PHP

Vorkurs C++ Programmierung

Programmieren Formulierung eines Algorithmus in einer Programmiersprache

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Herzlich willkommen zur Lehrveranstaltung. Softwaretechnische Grundlagen / Programmierpraktikum

Praktische Informatik 3: Einführung in die Funktionale Programmierung Vorlesung vom : Rekursive Datentypen

Datentypen. Agenda für heute, 4. März, Pascal ist eine streng typisierte Programmiersprache

Kontrollstrukturen - Universität Köln

Kurzanweisung für Google Analytics

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen

Tutorium Informatik 1. Aufgabe 2: Formatierte Ein- und Ausgabe

Programmieren 3. Programmieren in C und Python. Prof. Dr. Peter Barth. Hochschule RheinMain. Fachbereich Design Informatik Medien.

Crashkurs: Haskell. Mentoring FU Berlin Felix Droop

Modul 122 VBA Scribt.docx

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

1. Übung zu "Numerik partieller Differentialgleichungen"

Bitte wenden. Name: KURSARBEIT NR. 4 (10 DIFF GA) Seite 1

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Einführung in PHP. (mit Aufgaben)

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Kapiteltests zum Leitprogramm Binäre Suchbäume

Allgemeines. Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C. #include <stdio.h>

Grundlagen der Programmierung (Vorlesung 14)

Datentypen: Enum, Array, Struct, Union

Scala & Lift. Ferenc Lajko

Kommt Clean Code in Studium und Ausbildung zu kurz?

Grundlagen der Programmierung 2 (1.A)

Übung Info A. Übungsleiter. Informationen (Sprechstunden, Kontaktdaten): André Schaefer Gudrun Fischer

Übung 9 - Lösungsvorschlag

Java Kurs für Anfänger LMU SS09 Einheit 1 Javaumgebung

Theoretische Grundlagen des Software Engineering

Institut für Telematik Universität zu Lübeck. Programmieren. Kapitel 0: Organisatorisches. Wintersemester 2008/2009. Prof. Dr.

Vermeiden Sie es sich bei einer deutlich erfahreneren Person "dranzuhängen", Sie sind persönlich verantwortlich für Ihren Lernerfolg.

Wintersemester 2010/2011 Rüdiger Westermann Institut für Informatik Technische Universität München

Was ist ein Compiler?

Einführung in Eclipse und Java

Funktionales Programmieren in Python

mit Musterlösungen Prof. Dr. Gerd Stumme, Dipl.-Inform. Christoph Schmitz 11. Juni 2007

CGI Programmierung mit Ha. Markus Schwarz

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv

Client-Server-Beziehungen

Datenbanken und Informationssysteme II

Funktionale Programmierung mit Haskell. Jan Hermanns

Modellierung und Programmierung 1

Webseiten sind keine Gemälde. Webstandards für ein besseres Web. Webstandards für ein besseres Web

Schülerstudierende in Informatik-Grundvorlesungen an der Universität Göttingen

Lehrstuhl Informatik VI Grundzüge der Informatik * WS 2008/2009 Prof. Dr. Joachim Biskup

BEWERBERPROFILE. Erstellung einer Firmenwebseite Mustermann GmbH MUSTERPROFILE. Alle Studenten, Referenzen und Webseiten sind frei erfunden.

Grundlagen der Programmierung 2 (1.A)

Grundlagen von Python

J.6 Programmierung eingebetteter Systeme

Kurze Einführung in die Programmiersprache C++ und in Root

ALP I. Funktionale Programmierung

Objektorientierte Programmierung. Kapitel 12: Interfaces

Präsentation Von Laura Baake und Janina Schwemer

E-PRIME TUTORIUM Die Programmiersprache BASIC

Programmierung für Mathematik (HS13)

Transkript:

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