Funktionale Programmierung



Ähnliche Dokumente
Funktionale Programmierung mit Haskell

Funktionale Programmierung

Grundlagen der Programmierung 2. Bäume

Scala kann auch faul sein

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

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

CGI Programmierung mit Ha. Markus Schwarz

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

Vorkurs C++ Programmierung

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

Einführung in die Programmierung

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

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

Listen und Listenfunktionen. Grundlagen der Programmierung 2 A (Listen) Listen und Listenfunktionen. Listen? Haskell: Listen

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

Typdeklarationen. Es gibt in Haskell bereits primitive Typen:

Was bisher geschah Funktionale Programmierung in Haskell: Algebraische Datentypen Pattern Matching Polymorphie Typklassen Rekursive Datentypen:

Zweite Möglichkeit: Ausgabe direkt auf dem Bildschirm durchführen:

ALP I. Funktionale Programmierung

Programmieren in Haskell Einführung

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

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Einführung in die funktionale Programmierung

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

Grundprinzipien der funktionalen Programmierung

Java Einführung Operatoren Kapitel 2 und 3

Einführung in die Programmierung (EPR)

Excel Funktionen durch eigene Funktionen erweitern.

Suchmaschinen. Universität Augsburg, Institut für Informatik SS 2014 Prof. Dr. W. Kießling 23. Mai 2014 Dr. M. Endres, F. Wenzel Lösungsblatt 6

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Grundlagen der Programmierung 2 (1.C)

Beispiel 19. December 4, 2009

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

Diana Lange. Generative Gestaltung Operatoren

Einführung in das Programmieren Prolog Sommersemester Teil 2: Arithmetik. Version 1.0

Deklarationen in C. Prof. Dr. Margarita Esponda

Erwin Grüner

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

Grundlagen der Programmierung (Vorlesung 14)

Programmiersprachen und Übersetzer

Kontrollstrukturen - Universität Köln

Grundlagen von Python

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 : [ ]))?

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

Vererbung & Schnittstellen in C#

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Semantik von Formeln und Sequenzen

Einführung in die Java- Programmierung

Entwicklung eines korrekten Übersetzers

Binärbäume als weiteres Beispiel für abstrakte Datentypen in PVS mit in Knoten gespeicherten Werten vom Typ T:

Erfahrungen mit Hartz IV- Empfängern

Angaben zu einem Kontakt...1 So können Sie einen Kontakt erfassen...4 Was Sie mit einem Kontakt tun können...7

Modul 122 VBA Scribt.docx

Einführung in Haskell

Übungsblatt 3: Algorithmen in Java & Grammatiken

Der λ-kalkül. Frank Huch. Sommersemester 2015

Funktionale Programmierung mit Haskell. Jan Hermanns

Klassenbeziehungen & Vererbung

Operationalisierbare Qualitätskriterien für die Programmierung mit Erfahrungen aus PRÜ1 und PRÜ2

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

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

Funktionale Programmierung

Programmierkurs Java

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

der Eingabe! Haben Sie das Ergebnis? Auf diesen schwarzen Punkt kommen wir noch zu sprechen.

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Grundlagen der Programmierung Prof. H. Mössenböck. 3. Verzweigungen

Client-Server-Beziehungen

Einführung in die Programmierung

Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

Algorithmen mit Python

Java Kurs für Anfänger Einheit 5 Methoden

3. Stored Procedures und PL/SQL

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Programmierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester

Step by Step Webserver unter Windows Server von Christian Bartl

Arrays Fortgeschrittene Verwendung

Ausarbeitung des Interpreter Referats

Funktionales Programmieren in Python

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Wurzeln als Potenzen mit gebrochenen Exponenten. Vorkurs, Mathematik

4. AUSSAGENLOGIK: SYNTAX. Der Unterschied zwischen Objektsprache und Metasprache lässt sich folgendermaßen charakterisieren:

Was meinen die Leute eigentlich mit: Grexit?

HASKELL KAPITEL 2.1. Notationen: Currying und das Lambda-Kalkül

Theoretische Grundlagen des Software Engineering

Übungen zu C++ Kapitel 1

Objektorientierte Programmierung. Kapitel 12: Interfaces

Workshop Einführung in die Sprache Haskell

1. Probeklausur zu Programmierung 1 (WS 07/08)

Grundbegriffe der Informatik

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

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

Modul CTO Barcode für Windows Seite 1

Objektorientierte Programmierung

Professionelle Seminare im Bereich MS-Office

Transkript:

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 Main Modul Deklarationen Typ/Wert-Bindungen decls Ausdrücke ein main Ausdruck exp

4 Ausdrücke haben einen Typ: statische Semantik werden reduziert zu Werten: dynamische Semantik sind auch Werte spezieller Wert : Fehler, Nichtterminierung einfache Ausdrücke: Konstanten, Variablen, Konstruktoren exp c x K

5 Werte vollreduzierte Ausdrücke Basiswerte Konstruktoren mit vollreduzierten Argumenten λ-ausdrücke Werte werden nur reduziert bei Musterabgleich (pattern matching) Ein/Ausgabe Haskell ist lazy Wertdomäne: Val

6 Werte und Typen selbstgemacht Summentypen Parametrierte Typen, Produkttypen Rekursive Typen

7 Summentypen data Color = Red Blue Color: ein nullstelliger Typkonstruktor Red, Blue: nullstellige Wertkonstruktoren Red :: Color Bekannte Summentypen:Int, Char, Bool Achtung: Konstruktoren immer großschreiben!

8 Parametrierte Typen data Quad = Square Int Rect Int Int Quad: nullstelliger Typkonstruktor Square: einstelliger Wertkonstruktor Rect: zweistelliger Wertkonstruktor Typ von Square: Int Quad Typ von Rect: Int Int Quad Bekannte parametrierte Typen:Produkttypen wie Tupel Konstruktoren (Wert und Typ): (), (,), (,,),...

9 Rekursive Typen data Tree a = Emp Node a (Tree a) (Tree a) Tree: einstelliger Typkonstruktor mit kind Node dreistelliger Wertkonstruktor vom Typ α Tree α Tree α Tree α Bekannte rekursive Typen: Listen Wertkonstruktoren: [] und (:) Typkonstruktor: []

STOP 10

11 Funktionen exp... λx exp sind Werte genauso wie Basiswerte auch genannte λ Abstraktion voll reduziert Currying: λx 1 x 2... x k exp als Abkürzung von λx 1 λx 2... λx k exp

Ausdruck: Anwendungen exp... exp 1 exp 2 nicht reduzierte Ausdrücke (haben einen Redex) dynamische Semantik: exp 1 = λx exp Werte exp in einer Umgebung aus, in der x an exp 2 gebunden ist exp 2 wird nicht ausgewertet! Spezialfall: exp 1 wertet zu Konstruktor aus

13 Einschub: Auswertungsstrategien Strikt Alle Argumente werden ausgewertet, bevor sie an die formalen Parameter gebunden werden. Nicht strikt Argumente werden nur bei Bedarf ausgewertet Implementierungen call-by-value: strikt, alle Argumente auswerten Beispiele: C, Java, ML, Pascal, C++ call-by-need: nicht strikt, Auswertungen werden gespeichert (Haskell) call-by-name: nicht strikt, aber wie Inlining call-by-reference: strikt, Speicherort der Parameter wird übergeben Beispiele: Pascal, C++

Operatoren Infix Operatoren wie +, -, ++, wie normale Funktionen wenn in Klammern (+) 1 3 foldr (++) [] [[1,2],[3,4],[5,6]] Operatoren keine alphanumerischen Zeichen Funktionen in backquotes benutzbar wie Operatoren let plus a b = a + b in 1 plus 2 let conc = foldr (++) in [] conc [[1,2],[3,4]]

15 Sections Partiell angewendete Operatoren (op exp) λx x op exp : Abkürzung (syntactic sugar) (exp op) λx exp op x let m = \x y -> x-y in (2 m ) 5 map (+1) [1,2,3]

STOP 16

Let Ausdrücke exp let decls in exp decls pat 1 = exp 1 ;... ; pat k = exp k decls: Liste lokaler Deklarationen Muster oder Funktionen können gebunden werden lexikographischer Scope verschränkt rekursiv Layout Regel: alles was nach let in derselben Spalte startet

18 Deklarationen Deklarationen erzeugen Bindungen [x v] Umgebung: Menge von Bindungen E : Id Val Bindungen entstehen durch Musterabgleich: pat exp dynamische Semantik von let p = e in e in Umgebung E Werte e in E p e aus verdeckt bestehende Bindungen

19 Beispiele let x=1 in x+1 = 2 let (2,x) = (2,1) in x+1 = 2 let (2,x) = (1,1) in x+1 = let (2,x) = (1,1) in 1 = 1 let x=5 in let x=3 in x+x = 6 let x=5 in (let x=3 in x)+x = 8 let [x,y,z] = 1: in x = 1 let e = 0 : [n+1 n <- o] o = [n+1 n <- e] in (take 10 e, take 10 o)

STOP 20

21 Listen: map und fold Die wichtigsten Funktionen auf Listen sind definierbar durch map und fold. map f [] = [] map f (x:xs) = (f x):(map f xs) foldr f res [] = res foldr f res (x:xs) = f x (foldr f res xs)

comprehensions Jedes q i ist ein [ e q 1,..., q n ] Generator: p e, wobei p ein Muster von Typ τ und e ein Ausdruck von Typ [τ] ist; oder eine lokale Deklaration: let decl; oder ein Wächter: exp vom Typ Bool Beispiele nats = 1 : [n+1 n <- nats]: Liste aller natürlicher Zahlen [x x <- nats, x mod 2 == 0]: Liste aller geraden Zahlen fib = 1 : 1 : [a+b (a,b) <- zip fib (tail fib)]: Fibonacci Zahlen

23 comprehensions als syntaktischer Zucker [ e True ] [e] [ e q ] [e q, True] [ e b, Q ] if b then [e Q] else [] [ e p l, Q ] let ok p = [e Q] ok = [] in concatmap ok l [ e let decl, Q ] let decl in [e Q] Bemerkung: concatmap f [] = [] concatmap f (x:xs) = (f x) ++ concatmap f xs

STOP 24