Praktikum Funktionale Programmierung Teil 2: Typecheck und Transformation

Größe: px
Ab Seite anzeigen:

Download "Praktikum Funktionale Programmierung Teil 2: Typecheck und Transformation"

Transkript

1 Praktikum Funktionale Programmierung Teil 2: Typecheck und Transformation Dr. David Sabel Sommersemester 2015 Stand der Folien: SoSe 2015

2 Übersicht FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 2/34

3 Übersicht FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 2/34

4 Übersicht FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 2/34

5 Übersicht Bearbeitungszeit: 5 Wochen FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 2/34

6 Das Typsystem (ohne Typvariablen) Formalismen in den Typregeln: Sind von der Form: e :: τ = Ausdruck e hat den Typ τ Voraussetzung Konsequenz Γ ist eine Typumgebung: {x 1 :: τ 1,..., x n :: τ n } Γ S = Disjunkte Vereinigung von Γ und S Γ e :: τ: In der Typumgebung Γ kann man für e den Typ τ herleiten FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 3/34

7 Typregeln (ohne Typvariablen) Γ e :: τ Γ e 1 :: IO τ 1, Γ e 2 :: τ 1 IO τ 2 Γ return e :: IO τ Γ e 1 >>= e 2 :: IO τ 2 Γ e :: IO τ Γ forkio e :: IO τ Γ e 1 :: MVar τ, Γ e 2 :: τ Γ putmvar e 1 e 2 :: IO () Γ e :: MVar τ Γ takemvar e :: IO τ Γ e :: τ Γ newmvar e :: IO (MVar τ) i : Γ e i :: τ i und c :: τ 1... τ n τ n+1 Γ (c e 1... e ar(c) ) :: τ n+1 Γ e 1 :: τ 1 τ 2, Γ e 2 :: τ 1 Γ (e 1 e 2 ) :: τ 2 Γ {x :: τ 1 } e :: τ 2 Γ (λx e) :: τ 1 τ 2 FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 4/34

8 Typregeln (ohne Typvariablen) Γ {x :: τ} x :: τ Γ e 1 :: τ 1, Γ e 2 :: τ 2 τ 1 = τ 3 τ 4 oder τ 1 = T Γ (seq e 1 e 2 ) :: τ 2 Γ e :: T, i : Γ {x 1,i :: τ 1,i,... x ni,i :: τ ni,i} (c i x 1,i... x ni,i) :: T, i : Γ {x 1,i :: τ 1,i,... x ni,i :: τ ni,i} e i :: τ 2 Γ (case T e of (c 1 x 1,1... x n1,1 e 1 )... (c m x 1,m... x nm,m e m )) :: τ 2 i : Γ {x 1 :: τ 1,... x n :: τ n } e i :: τ i, Γ {x 1 :: τ 1,... x n :: τ n } e :: τ Γ (letrec x 1 = e 1,... x n = e n in e) :: τ FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 5/34

9 Algorithmus dazu Baue den Typherleitungsbaum von unten nach oben auf. Z.B. aber auch x :: Bool x :: Bool λx x :: Bool Bool x :: ListBool x :: ListBool λx x :: ListBool ListBool FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 6/34

10 Größeres Beispiel {x :: Bool, y :: Bool} y :: Bool {x :: Bool} (λy x) :: Bool Bool True :: Bool (λx λy x) :: Bool Bool Bool True :: Bool ((λx λy x) True) :: Bool Bool ((λx λy x) True False) :: Bool False :: Bool False :: Bool FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 7/34

11 Problem bei diesem Typsystem Man muss manchmal den richtigen Typ raten Z.B. {x :: τ 1 } e :: τ 2 λx x :: τ 1 τ 2 Welchen Typ nimmt man für τ 1? Ausweg: Typvariablen benutzen und Typgleichungen E {x :: α} e :: τ 2, E λx x :: τ 1 τ 2, E In den Gleichungen E werden die Anforderungen an die Variablen gesammelt FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 8/34

12 Beispiel: Anwendungsregel Vorher: Γ e 1 :: τ 1 τ 2, Γ e 2 :: τ 1 Γ (e 1 e 2 ) :: τ 2 Jetzt: Γ e 1 :: τ 1, E 1 und Γ e 2 :: τ 2, E 2 Γ (e 1 e 2 ) :: α, E 1 E 2 {τ 1. = τ2 α} Γ e : τ, E e kann unter Typumgebung mit dem Typ τ typisiert werden, wobei die Gleichungen aus E noch gelöst werden müssen FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 9/34

13 Typisierungsregeln mit Gleichungen Γ e :: τ, E Γ return e :: IO τ, E Γ e 1 :: τ 1, E 1 und Γ e 2 :: τ 2, E 2 Γ e 1 >>= e 2 :: IO α 2, E 1 E 2 {τ 1. = IO α, τ2. = α IO α2 } Γ e :: τ, E Γ forkio e :: τ, E {τ. = IO α} Γ e :: τ, E Γ takemvar e :: IO α, E {τ. = MVar α} Γ e 1 :: τ 1, E 1 und Γ e 2 :: τ 2, E 2 Γ putmvar e 1 e 2 :: IO (), E 1 E 2 {τ 1. = MVar τ2 } FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 10/34

14 Typisierungsregeln mit Gleichungen (2) Γ e :: τ, E Γ newmvar e :: IO (MVar τ), E Γ (c e 1... e ar(c) ) :: τ n+1, i i : Γ e i :: τ i, E i E i {Typ(c). = τ 1... τ n τ n+1 } Γ e 1 :: τ 1, E 1 und Γ e 2 :: τ 2, E 2 Γ (e 1 e 2 ) :: α, E 1 E 2 {τ 1. = τ2 α} Γ {x :: α} e :: τ, E Γ (λx e) :: α τ, E Γ {x :: τ} x :: τ, FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 11/34

15 Typisierungsregeln mit Gleichungen (3) Γ e 1 :: τ 1, E 1 Γ e 2 :: τ 2, E 2 τ 1. = τ3 τ 4 oder τ 1. = T Γ (seq e 1 e 2 ) :: τ 2, E 1 E 2 Γ e :: τ, E i : Γ {x 1,i :: α 1,i,... x ni,i :: α ni,i} (c i x 1,i... x ni,i) :: τ i, E i i : Γ {x 1,i :: α 1,i,... x ni,i :: α ni,i} e i :: τ i, E i case e of(c 1 x 1,1... x n1,1 e 1 ) Γ... :: α, (c m x 1,m... x nm,m e m ) E (E i E i {α =. τ i} {τ =. τ i }) i i : Γ {x 1 :: α 1,... x n :: α n } e i :: τ i, E i Γ {x 1 :: α 1,... x n :: α n } e :: τ, E Γ (letrec x 1 = e 1,... x n = e n in e) :: τ, E i E i i {α i. = τi } FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 12/34

16 Beispiel {x :: α 2, y :: α 3 } x :: α 2, {x :: α 2 } λy x :: α 3 α 2, (λx λy x) :: α 2 α 3 α 2,, True :: Bool,. ((λx λy x) True) :: α 1, {α 2 α 3 α 2 = Bool α1 }, False :: Bool,. ((λx λy x) True False) :: α 0, {α 2 α 3 α 2 = Bool α1, α 1 = Bool α 0 } FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 13/34

17 Beispiel {x :: α 2, y :: α 3 } x :: α 2, {x :: α 2 } λy x :: α 3 α 2, (λx λy x) :: α 2 α 3 α 2,, True :: Bool,. ((λx λy x) True) :: α 1, {α 2 α 3 α 2 = Bool α1 }, False :: Bool,. ((λx λy x) True False) :: α 0, {α 2 α 3 α 2 = Bool α1, α 1 = Bool α 0 } Löse: {α 2 α 3 α 2. = Bool α1, α 1 = Bool α 0 } Durch Hinschauen: α 2 α 3 α 0 α 1 = Bool = Bool = Bool = Bool Bool FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 13/34

18 Regel zur Typherleitung Γ e :: τ, E Typherleitung Γ e :: σ(τ) wenn σ Lösung von E Für das Beispiel:.. ((λx λy x) True False) :: α 0, {α 2 α 3 α 2 = Bool α1, α 1 = Bool α0 } ((λx λy x) True False) :: Bool FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 14/34

19 Gleichungen lösen: Unifikation Unifikation: Verfahren um Gleichungen zu lösen Datenstrukturen: E g = Menge der gelösten Gleichungen E u = Menge der ungelösten Gleichungen Start: E g =, E u enthält alle Gleichungen Ende: Fail oder E u = Regeln: nächste Folie Notation: E[τ/a] ersetze a durch τ in allen Untertermen der Gleichungen in E FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 15/34

20 Unifikationsregeln (1) α ist Typvariable, T, T 1, T 2 sind Typkonstruktoren Elim E g, {α. = α} E u E g, E u Solve E g, {α =. τ} E u E g [τ/α] {α =., falls α nicht in τ vorkommt. τ}, E u [τ/α] Occ.Check E g, {α. = τ} E u fail., falls α in τ vorkommt und τ = α Orient E g, {τ. = α} E u E g, {α. = τ} E u, wenn τ keine Typvariable ist Decomp.T E g, {T. = T } E u E g, E u FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 16/34

21 Unifikationsregeln (2) α ist Typvariable, T, T 1, T 2 sind Typkonstruktoren FailT E. g, {T 1 = τ} Eu, falls τ = T 2 und T 1 T 2, τ = IO τ, fail τ = MVar τ oder τ = τ 1 τ 2 Decomp.IO E. g, {IO τ 1 = IO τ2 } E u. E g, {τ 1 = τ2 } E u. = τ 2} E u FailMVar E g, {MVar τ 1 fail, falls τ 2 = T, τ 2 = MVar τ oder τ 2 = τ 1 τ 2 FailIO E g, {IO τ 1 fail Decomp.MVar E. g, {MVar τ 1 = MVar τ2 } E u. E g, {τ 1 = τ2 } E u. = τ 2} E u, falls τ 2 = T, τ 2 = IO τ oder τ 2 = τ 1 τ 2 FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 17/34

22 Unifikationsregeln (3) α ist Typvariable, T, T 1, T 2 sind Typkonstruktoren Decomp.Fn E. g, {τ 1 τ 2 = τ 1 τ 2} E u. E g, {τ 1 = τ. 1, τ 2 = τ 2 } E u FailFn E. g, {τ 1 τ 2 = τ} Eu, falls τ = T, τ = IO τ fail oder τ = MVar τ FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 18/34

23 Beispiel E g =, E u = {b c =. c a, b =. d MVar Bool, c =. Bool MVar d, e =. a Bool} E g =, E u = {b =. c, c =. a, b =. d MVar Bool, c =. Bool MVar d, e =. a Bool} E g = {b =. c}, E u = {c =. a, c =. d MVar Bool, c =. Bool MVar d, e =. a Bool} E g = {b =. a, c =. a}, E u = {a =. d MVar Bool, a =. Bool MVar d, e =. a Bool} E g = {b =. d MVar Bool, c =. d MVar Bool, a =. d MVar Bool}, E u = {d MVar Bool =. Bool MVar d, e =. (d MVar Bool) Bool} E g = {b =. d MVar Bool, c =. d MVar Bool, a =. d MVar Bool}, E u = {d =. Bool, MVar Bool =. MVar d, e =. (d MVar Bool) Bool} E g = {b =. Bool MVar Bool, c =. Bool MVar Bool, a =. Bool MVar Bool, d =. Bool}, E u = {MVar Bool =. MVar Bool, e =. (Bool MVar Bool) Bool} E g = {b =. Bool MVar Bool, c =. Bool MVar Bool, a =. Bool MVar Bool, d =. Bool}, E u = {Bool =. Bool, e =. (Bool MVar Bool) Bool} E g = {b =. Bool MVar Bool, c =. Bool MVar Bool, a =. Bool MVar Bool, d =. Bool}, E u = {e =. (Bool MVar Bool) Bool} E g = {b =. Bool MVar Bool, c =. Bool MVar Bool, a =. Bool MVar Bool, d =. Bool, e =. (Bool MVar Bool) Bool}, E u = FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 19/34

24 Beispiel (Forts.) E g = E u = {b =. Bool MVar Bool, c =. Bool MVar Bool, a =. Bool MVar Bool, d =. Bool, e =. (Bool MVar Bool) Bool}, Die Substitution (genannt: der Unifikator) lässt sich nun ablesen als {b Bool MVar Bool, c Bool MVar Bool, a Bool MVar Bool, d Bool, e (Bool MVar Bool) Bool}, FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 20/34

25 Aufgabe > type TypeEquation tname = (Type tname, Type tname) Implementieren: unify :: [TypeEquation ConsName] -> Either String [TypeEquation ConsName] Liefert: Hilfreich: Right loesung, wobei loesung die gelösten Gleichungen oder Left fehler, wobei fehler eine Fehlermeldung Variante von unify, die als Eingaben die gelösten und die ungelösten Gleichungen erhält. Funktion, die die Substitution E[τ/α] auf Typgleichungen durchführt. Funktion, die testet, ob eine Typvariable α in einem Typ τ vorkommt. FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 21/34

26 Implementierung des Typchecks Markiere alle Unterterme mit ihrem Typ: Verwende dafür den Label-Konstruktor Beispiel: Lam ((1,13),"x") (Var ((1,18),"x")) wir markiert: Label (TVar "t1" :->: TVar "t1") (Lam ((1,13),"x") (Label (TVar "t1") (Var ((1,18),"x")))) FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 22/34

27 Implementierung des Typchecks (2) Algorithmus: Wende die Typisierungsregeln rekursiv über die Termstruktur an Gleichungen dabei aufsammeln Am Ende unifizieren seq-test danach FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 23/34

28 Typen der Datenkonstruktoren Vorgegeben: > type TypeOfCons = [(String, Type ConsName)] Abbildung von Konstruktornamen auf den Typ des Konstruktors Hilfsfunktionen: mktypeofconslist :: [TDef ConsName ConsName] -> TypeOfCons erstellt aus der TDef-Liste die TypeOfCons-Liste gettypeofcons :: TypeOfCons -> String -> Maybe (Type ConsName) schaut den Typ eines Konstruktors in der TypeOfCons-Liste nach. Kann für Typ(c) verwendet werden. FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 24/34

29 Aufgabe Typ für Γ: type TypeEnvironment = [(String,Type ConsName)] Implementieren: > typecheck :: > TypeOfCons -- Liste der Konstruktortypen > -> [String] -- frische Namen > -> TypeEnvironment -- Gamma > -> (Expr () ConsName VarName) -- Ausdruck > -> ([String], -- verbleibende Namen > [TypeEquation ConsName], -- Gleichungen E > Expr (Type ConsName) ConsName VarName) -- Ausdruck mit Typmarkierungen Eingaben Die TypeOfCons-Liste Eine Liste von Strings, die als neue Namen dienen. Der Ausdruck Ausgabe ist 3-Tupel verbleibende neuen Namen Den Gleichungen E Mit Typen markierter Ausdruck Dran denken: Fehler, falls freie Variable entdeckt wird FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 25/34

30 Aufgabe Implementieren: tcheck :: ParseTree () ConsName VarName -> Expr (Type ConsName) ConsName VarName 1 typecheck für den Ausdruck 2 Unifikation 3 Unifikator anwenden 4 seq-ausdrücke prüfen FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 26/34

31 Aufgabe Γ e :: τ, E Γ, e :: σ(τ), E σ, wenn σ Lösung von E typecheck anpassen, so dass nach jeder Regelanwendung unifziert wird, bessere Fehlermeldungen. FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 27/34

32 Distinct Variable Convention Ausdruck erfüllt die DVC, wenn alle Variablen verschiedene Namen haben (λx x) (λx x) erfüllt die DVC nicht, (λx x) (λy y) schon In DVC überführen: Ausdruck mit frischen Variablen umbenennen Algorithmus in etwa: benenneum(λx e, σ) = λy.(benenneum(e, σ {x y}) benenneum(x, σ) = σ(x)... FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 28/34

33 Aufgabe Implementieren: > renameandclean :: > Expr (Type ConsName) ConsName VarName -- typis. Ausdrucl > -> [String] -- frische Namen > -> (Expr () String String, [String]) -- (Ausdruck, restl. Namen) Umbenennen Positionsmarkierungen für Variablen und Konstruktornamen wegwerfen ConsName String VarName String Typinformation wegwerfen: Label Typ Ausdruck Ausdruck FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 29/34

34 Maschinenausdrücke - MExpr Abstrakte Maschinen erfordern leicht vereinfachte Syntax Argumente von Anwendungen, Konstruktoranwendungen, etc. dürfen nur Variablen sein e, e i Expr M ::= x me (λx e) (e x) (c x 1... x ar(c) ) (seq e 1 x) (case T e of {((c T,1 x 1... x ar(ct,1 )) e T,1 );... ((c T, T x 1... x ar(ct, T )) e T, T ))} (letrec x 1 = e 1 ;... ; x n = e n in e) wobei n 1 me MExpr M ::= (return x) (x 1 >>= x 2 ) (forkio x) (takemvar x) (newmvar x) (putmvar x 1 x 2 ) FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 30/34

35 Übersetzung (1) (e 1 e 2) = letrec x = e 2 in ( e 1 x), wobei x eine neue Variable ist. (c e 1... e n) = letrec x 1 = e 1,..., x n = e n in (c x 1... x n), wobei x 1,..., x n neue Variablen sind. seq e 1 e 2 = letrec x = e 2 in (seq e 2 x), wobei x eine neue Variable ist. return e = letrec x = e in return x, wobei x eine neue Variable ist. e 1 >>= e 2 = letrec x 1 = e 1, x 2 = e 2 in x 1 >>= x 2, wobei x 1, x 2 neue Variablen sind. forkio e = letrec x = e in forkio x, wobei x eine neue Variable ist. takemvar e = letrec x = e in takemvar x, wobei x eine neue Variable ist. newmvar e = letrec x = e in newmvar x, wobei x eine neue Variable ist. putmvar e 1 e 2 = letrec x 1 = e 1, x 2 = e 2 in putmvar x 1 x 2, wobei x 1, x 2 neue Variablen sind. FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 31/34

36 Übersetzung (2) Für alle anderen Konstrukte wird homomorph über die Termstruktur gezogen: x = x λx e = λx e letrec x 1 = e 1,..., x n = e n in e = letrec x 1 = e 1,..., x n = e n in e case T e of {pat 1 e 1;... ; pat T e T } = case T e of {pat 1 e 1 ;... ; pat T e T } FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 32/34

37 Datentypen > data MExpr cname v = > VarM v > LamM v (MExpr cname v) > AppM (MExpr cname v) v > SeqM (MExpr cname v) v > ConsM (Either MAction cname) [v] > CaseM (MExpr cname v) [MCAlt cname v] > LetrecM [MBinding cname v] (MExpr cname v) > deriving(eq,show) > data MCAlt cname v = > CAltM cname [v] (MExpr cname v) > deriving(eq,show) > data MBinding cname v = > v := (MExpr cname v) > deriving(eq,show) FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 33/34

38 Aufgaben Implementieren: > normalize :: > [String] -- neue Namen > -> Expr () String String -- Ausdruck > -> ([String], MExpr String String) -- (Namen, Maschinenausdruck) Implementieren: > tomachineexpr :: String -> MExpr String String Lexen, Parsen, Typecheck, Umbenennen und in MExpr überführen. FP-PR Teil 2: Typecheck und Transformation Sommersemester 2015 D. Sabel 34/34

Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen

Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen Stand der Folien: SoSe 2011 Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen Dr. David Sabel Sommersemester 2011 Übersicht FP-PR Teil 1: Lexen & Parsen Sommersemester 2011 D. Sabel 2/20 Übersicht

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

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

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

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

Grundlagen der Programmierung 3 A

Grundlagen der Programmierung 3 A Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2016 Haskell, Typen, und Typberechnung Ziele: Haskells Typisierung Typisierungs-Regeln

Mehr

Grundlagen der Programmierung 3 A

Grundlagen der Programmierung 3 A Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2017 Haskell, Typen, und Typberechnung Ziele: Haskells Typisierung Typisierungs-Regeln

Mehr

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Überladung und Konversion in Haskell. Typisierung in Haskell

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Überladung und Konversion in Haskell. Typisierung in Haskell Haskell, Typen, und Typberechnung Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr Manfred Schmidt-Schauß Ziele: Haskells Typisierung Typisierungs-Regeln Typ-Berechnung Sommersemester

Mehr

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Einige andere Programmiersprachen. Typisierung in Haskell

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Einige andere Programmiersprachen. Typisierung in Haskell Haskell, Typen, und Typberechnung Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr. Manfred Schmidt-Schauß Ziele: Haskells Typisierung Typisierungs-Regeln Typ-Berechnung Milners

Mehr

Einführung in Funktionale Programmierung Typisierung

Einführung in Funktionale Programmierung Typisierung Einführung in Funktionale Programmierung Typisierung PD Dr. David Sabel WS 2015/16 Stand der Folien: 19. November 2015 Motivation Typen Typisierungsverfahren Ziele des Kapitels Warum typisieren? Typisierungsverfahren

Mehr

Praktikum Funktionale Programmierung Teil 3: Abstrakte Maschinen Mark 1 und Mark 2

Praktikum Funktionale Programmierung Teil 3: Abstrakte Maschinen Mark 1 und Mark 2 Praktikum Funktionale Programmierung Teil 3: Abstrakte Maschinen und Professur für Künstliche Intelligenz und Softwaretechnologie Sommersemester 2009 Zeitplan Teil 3 Meilenstein 1 Teil 1: Lexen und Parsen

Mehr

Übersicht. Einführung in die Funktionale Programmierung: Ziele des Kapitels. Typisierung Prof Dr. Manfred Schmidt-Schauß WS 2012/13

Übersicht. Einführung in die Funktionale Programmierung: Ziele des Kapitels. Typisierung Prof Dr. Manfred Schmidt-Schauß WS 2012/13 Übersicht Einführung in die Funktionale Programmierung: Typisierung Prof Dr. Manfred Schmidt-Schauß WS 2012/13 1 Motivation 2 Typen: Sprechweisen, Notationen und Unifikation 3 Typisierungsverfahren Iteratives

Mehr

Der einfach getypter Lambda-Kalkül

Der einfach getypter Lambda-Kalkül Der einfach getypter Lambda-Kalkül Typprüfung und Typinferenz Tobias Nipkow und Steffen Smolka Technische Universität München 1 Einleitung 2 Explizit getypter λ-kalkül 3 Implizit getypter λ-kalkül Statische

Mehr

Übersicht. Einführung in die Funktionale Programmierung: Übersicht: Expression und Typen. Ziele des Kapitels

Übersicht. Einführung in die Funktionale Programmierung: Übersicht: Expression und Typen. Ziele des Kapitels Übersicht Einführung in die Funktionale Programmierung: Typisierung Prof Dr. Manfred Schmidt-Schauß 1 Motivation 2 Typen: Sprechweisen, Notationen und Unifikation 3 Typisierungsverfahren Iteratives Typisierungsverfahren

Mehr

Einführung in die funktionale Programmierung

Einführung in die funktionale Programmierung Einführung in die funktionale Programmierung Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 18. November 2008 Typcheck zu KFPT; KFPTS;... Ziele des Kapitels: Polymorphes

Mehr

Haskell, Typen, und Objektorientierung

Haskell, Typen, und Objektorientierung Haskell, Typen, und Objektorientierung ZIELE dieses Kapitels Haskells Typisierung Milners Polymorpher Typcheck Haskells Typklassen P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite

Mehr

Einführung in die funktionale Programmierung

Einführung in die funktionale Programmierung Einführung in die funktionale Programmierung Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 17. Oktober 2006 Einführung in Haskell: Syntax, Reduktionen, Kernsprachen Haskell,

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

Einführung in die funktionale Programmierung

Einführung in die funktionale Programmierung Einführung in die funktionale Programmierung Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 28. Oktober 2008 Einführung in Haskell: Syntax, Reduktionen, Kernsprachen Haskell,

Mehr

Einführung in die funktionale Programmierung

Einführung in die funktionale Programmierung Einführung in die funktionale Programmierung Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 26. Oktober 2006 Haskell - Einführung Syntax Typen Auswertung Programmierung

Mehr

Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen

Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen Professur für Künstliche Intelligenz und Softwaretechnologie Sommersemester 2009 Überblick Teil 1: Lexen und Parsen Die Sprache LFP +C Professur

Mehr

Lösungen zum Aufgabenblatt 10 Logik und modelltheoretische Semantik

Lösungen zum Aufgabenblatt 10 Logik und modelltheoretische Semantik Lösungen zum Aufgabenblatt 10 Logik und modelltheoretische Semantik Universität München, CIS, SS 2013 Hans Leiß Abgabetermin: Do, 4.7.2013, 16 Uhr, in meinem Postfach Aufgabe 10.1 Vereinfache die folgenden

Mehr

Haskell, Typen und Typberechnung

Haskell, Typen und Typberechnung Kapitel 5 Haskell, Typen und Typberechnung 5.1 Typisierung in Haskell In diesem Kapitel sind die Typisierungsmethoden in Haskell beschrieben, wobei auch kurz auf die Typisierung in anderen Programmiersprachen

Mehr

Übung zur Vorlesung Automatisierte Logik und Programmierung

Übung zur Vorlesung Automatisierte Logik und Programmierung Übung zur Vorlesung Automatisierte Logik und Programmierung Prof. Chr. Kreitz Universität Potsdam, Theoretische Informatik Wintersemester 008/09 Blatt Abgabetermin: 9.1.08 nach der Übung Aufgabe.1 (Typisierung)

Mehr

Typen und Typcheck. Kapitel Typsysteme, Typüberprüfung

Typen und Typcheck. Kapitel Typsysteme, Typüberprüfung Kapitel 4 Typen und Typcheck 4.1 Typsysteme, Typüberprüfung Wir haben bisher algebraische Datentypen in KFPT, Erweiterungen von KFPT und Haskell kennengelernt, und gesehen, dass es in KFPT dynamische Typfehler

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

Vorlesung 6: Zum Typsystem von Haskell

Vorlesung 6: Zum Typsystem von Haskell Praktische Informatik 3 Funktionale Programmierung WiSe 2010/11, Universität Bremen Dennis Walter, DFKI Bremen Revision 1267 vom 2010-12-14 Vorlesung 6: Zum Typsystem von Haskell 1 Motivation Typen erlauben

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

Haskell, Typen und Typberechnung

Haskell, Typen und Typberechnung Kapitel 3 Haskell, Typen und Typberechnung 3.1 Typisierung in Haskell In diesem Kapitel sind die Typisierungsmethoden in Haskell beschrieben, wobei auch kurz auf die Typisierung in anderen Programmiersprachen

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

Praktikum Funktionale Programmierung Teil 5: Codeerzeugung, Compiler, Interpreter und VM

Praktikum Funktionale Programmierung Teil 5: Codeerzeugung, Compiler, Interpreter und VM Praktikum Funktionale Programmierung Teil 5: Codeerzeugung, Compiler, Interpreter und VM Professur für Künstliche Intelligenz und Softwaretechnologie Sommersemester 2009 Zeitplan Teil 5 Meilenstein 1 Teil

Mehr

1. Typen 1.1 Typsicherheit 1.2 Typprüfung

1. Typen 1.1 Typsicherheit 1.2 Typprüfung 1. Typen 1.1 Typsicherheit 1.2 Typprüfung Ein Typsystem ist ein praktikables, syntaktisches Verfahren, mit dem man die Abwesenheit gewisser Laufzeit-Eigenschaften eines Programms beweisen kann, indem man

Mehr

ALP I. Funktionale Programmierung

ALP I. Funktionale Programmierung ALP I Funktionale Programmierung Typ-Klassen und SS 2011 Überladung von Datentypen Funktionen sollen oft auf verschiedene Datentypen anwendbar sein, aber nicht auf beliebige Datentypen. Beispiel: Die (+)

Mehr

Ü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

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

LR: Syntax. Semantik und Analyse von Funktionalen Programmen (SAFP): LR: Reduktions-Regeln. LR: Reduktions-Regeln

LR: Syntax. Semantik und Analyse von Funktionalen Programmen (SAFP): LR: Reduktions-Regeln. LR: Reduktions-Regeln LR: Syntax Semantik und Analyse von Funktionalen Programmen (SAFP): KFPT mit Sharing und Striktheisanalyse: LR Prof. Dr. Manfred Schmidt-Schauß SAFP; WS 2014/15 E ::= V (c E 1... E ar(c) ) (seq E 1 E 2

Mehr

Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom : Typvariablen und Polymorphie

Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom : Typvariablen und Polymorphie 16:02:01 2017-01-17 1 [37] Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom 08.11.2016: Typvariablen und Polymorphie Christoph Lüth Universität Bremen Wintersemester 2016/17 PI3 WS 16/17

Mehr

Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom : Typvariablen und Polymorphie

Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom : Typvariablen und Polymorphie Rev. 2749 1 [28] Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom 04.11.2014: Typvariablen und Polymorphie Christoph Lüth Universität Bremen Wintersemester 2014/15 2 [28] Fahrplan Teil

Mehr

Praktikum Funktionale Programmierung 10. Besprechung

Praktikum Funktionale Programmierung 10. Besprechung Praktikum Funktionale Programmierung 10. Besprechung Professur für Künstliche Intelligenz und Softwaretechnologie Sommersemester 2007 Meilenstein 3 Teil 6: Codeerzeugung, Compiler, Interpreter und VM 9.

Mehr

KIV-Beweise in Scala. 25. Juni 2013 G. Schellhorn, D. Haneberg: Formale Methoden im Software Engineering 253 / 300

KIV-Beweise in Scala. 25. Juni 2013 G. Schellhorn, D. Haneberg: Formale Methoden im Software Engineering 253 / 300 KIV-Beweise in Scala 25. Juni 2013 G. Schellhorn, D. Haneberg: Formale Methoden im Software Engineering 253 / 300 Scala und KIV Im zweiten Scala-Versuch wollen wir Beweise programmieren. Zunächst einen

Mehr

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

Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Nebenläufige Programmierung in Haskell (2) Design Ü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

Mehr

Semantik und Analyse von Funktionalen Programmen (SAFP):

Semantik und Analyse von Funktionalen Programmen (SAFP): Semantik und Analyse von Funktionalen Programmen (SAFP): KFPT mit Sharing und Striktheisanalyse: LR Prof. Dr. Manfred Schmidt-Schauß SAFP; WS 2014/15 Stand der Folien: 5. Februar 2015 LR: Syntax E ::=

Mehr

WS 2013/2014. Robert Giegerich. 11. Dezember 2013

WS 2013/2014. Robert Giegerich. 11. Dezember 2013 WS 2013/2014 Robert AG Praktische Informatik 11. Dezember 2013 höherer Ordnung Worum geht es heute? In Haskell gibt es, die als Argument haben oder als Ergebnis liefern. Diese nennt man höherer Ordnung.

Mehr

LR: Syntax. Semantik und Analyse von Funktionalen Programmen (SAFP): LR: Reduktions-Regeln. LR: Reduktions-Regeln

LR: Syntax. Semantik und Analyse von Funktionalen Programmen (SAFP): LR: Reduktions-Regeln. LR: Reduktions-Regeln LR: Syntax Semantik und Analyse von Funktionalen Programmen (SAFP): LR: Sharing und Striktheitsanalyse titleslide Prof. Dr. Manfred Schmidt-Schauß SAFP; WS 2017/18 E ::= V (c E 1... E ar(c) ) (seq E 1

Mehr

WS 2013/2014. Robert Giegerich. 11. Dezember 2013

WS 2013/2014. Robert Giegerich. 11. Dezember 2013 WS 2013/2014 Robert AG Praktische Informatik 11. Dezember 2013 höherer Ordnung Worum geht es heute? In Haskell gibt es, die als Argument haben oder als Ergebnis liefern. Diese nennt man höherer Ordnung.

Mehr

Semantik und Analyse von Funktionalen Programmen (SAFP):

Semantik und Analyse von Funktionalen Programmen (SAFP): Semantik und Analyse von Funktionalen Programmen (SAFP): LR: Sharing und Striktheitsanalyse titleslide Prof. Dr. Manfred Schmidt-Schauß SAFP; WS 2017/18 Stand der Folien: 30. Januar 2018 LR: Syntax E ::=

Mehr

Fortgeschrittene Funktionale Programmierung

Fortgeschrittene Funktionale Programmierung Fortgeschrittene Funktionale Programmierung 12. Vorlesung Janis Voigtländer Universität Bonn Wintersemester 2015/16 Motivation Auf http://www-ps.iai.uni-bonn.de/ft: 1 Motivation 1 Betrachtungen zu Polymorphie

Mehr

Labor Compilerbau. Jan Hladik. Sommersemester DHBW Stuttgart. Jan Hladik (DHBW Stuttgart) Labor Compilerbau Sommersemester / 20

Labor Compilerbau. Jan Hladik. Sommersemester DHBW Stuttgart. Jan Hladik (DHBW Stuttgart) Labor Compilerbau Sommersemester / 20 Labor Compilerbau Jan Hladik DHBW Stuttgart Sommersemester 2017 Jan Hladik (DHBW Stuttgart) Labor Compilerbau Sommersemester 2017 1 / 20 Resolution in der Prädikatenlogik testet Erfüllbarkeit (indirekt

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

3 Terme und Algebren 3.1 Terme

3 Terme und Algebren 3.1 Terme 3 Terme und Algebren 3.1 Terme Mod - 3.1 In allen formalen Kalkülen benutzt man Formeln als Ausdrucksmittel. Hier betrachten wir nur ihre Struktur - nicht ihre Bedeutung. Wir nennen sie Terme. Terme bestehen

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

Fortgeschrittene Funktionale Programmierung

Fortgeschrittene Funktionale Programmierung Fortgeschrittene Funktionale Programmierung 13. Vorlesung Janis Voigtländer Universität Bonn Wintersemester 2015/16 Erweiterung um Datentypen Typen: τ := Bool [τ] Terme: t := False True [ ] τ t : t case

Mehr

Haskell, Typen und Typberechnung

Haskell, Typen und Typberechnung Kapitel 5 Haskell, Typen und Typberechnung 5.1 Typisierung in Haskell In diesem Kapitel sind die Typisierungsmethoden in Haskell beschrieben, wobei auch kurz auf die Typisierung in anderen Programmiersprachen

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

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

Grundlagen der Programmierung 2 A (Listen)

Grundlagen der Programmierung 2 A (Listen) Grundlagen der Programmierung 2 A (Listen) Haskell: Listen Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2017 Listen und Listenfunktionen Listen modellieren Folgen von gleichartigen, gleichgetypten Objekten.

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

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

Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell): Was bisher geschah deklarative Programmierung funktional: Programm: Menge von Termgleichungen, Term Auswertung: Pattern matsching, Termumformungen logisch: Programm: Menge von Regeln (Horn-Formeln), Formel

Mehr

9 Algebraische Datentypen

9 Algebraische Datentypen 9 Algebraische Datentypen Dieses Kapitel erweitert Haskells Typsystem, das neben Basistypen (Integer, Float, Char, Bool,... ) und Typkonstruktoren ([ ] und ( )) auch algebraische Datentypen kennt. Ganz

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

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

Listen und Listenfunktionen. Grundlagen der Programmierung 2 A (Listen) Listen und Listenfunktionen. Listen? Haskell: Listen Listen und Listenfunktionen Grundlagen der Programmierung 2 A (Listen) Haskell: Listen Prof. Dr. Manfred Schmidt-Schauß Listen modellieren Folgen von gleichartigen, gleichgetypten Objekten. Ausdruck im

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

Beweise und Typen. 9.1 Formalisierung und Beweis

Beweise und Typen. 9.1 Formalisierung und Beweis 120 9. Beweise und Typen 9 Beweise und Typen Dieses Kapitel ist zweigeteilt. Als erstes wenden wir uns dem Thema zu, wie wir Eigenschaften von funktionalen Programmen beweisen können. Aufwandsabschätzungen

Mehr

Implementierung eines LR-Parser-Generators mit syntaktischen Prädikaten

Implementierung eines LR-Parser-Generators mit syntaktischen Prädikaten Implementierung eines LR-Parser-Generators mit syntaktischen Prädikaten Aufgabenbeschreibung 29. Juli 2011 1 Einleitung und Motivation Der Parser-Generator Antlr [Par07] bietet die Möglichkeit, die Auswahl

Mehr

Programmieren in Haskell Programmiermethodik

Programmieren in Haskell Programmiermethodik Programmieren in Haskell Programmiermethodik Peter Steffen Universität Bielefeld Technische Fakultät 12.01.2011 1 Programmieren in Haskell Bisherige Themen Was soll wiederholt werden? Bedienung von hugs

Mehr

Theoretische Informatik II

Theoretische Informatik II Theoretische Informatik II Dr. Eva Richter / Holger Arnold Universität Potsdam, Theoretische Informatik, Sommersemester 2008 Übungsblatt 3 (Version 4) Abgabetermin: 13.5.2008, 12.00 Uhr Der λ-kalkül Da

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

Formale Methoden der Softwaretechnik 1 Vorlesung vom : Grundlage von Isabelle

Formale Methoden der Softwaretechnik 1 Vorlesung vom : Grundlage von Isabelle 1 Formale Methoden der Softwaretechnik 1 Vorlesung vom 16.11.09: Grundlage von Isabelle Christoph Lüth, Lutz Schröder Universität Bremen Wintersemester 2009/10 2 Fahrplan Teil I: Grundlagen der Formalen

Mehr

Einführung IMP-Syntax Reduktionssemantik Maschinen-Semantik. Teil IV. Semantik imperativer Sprachen

Einführung IMP-Syntax Reduktionssemantik Maschinen-Semantik. Teil IV. Semantik imperativer Sprachen Teil IV Semantik imperativer Sprachen 201 1. Einführung Alternativen zur Beschreibung der Semantik: natürliche Sprache (bisher, unpräzise) operational Reduktionssemantik (vgl. Haskell-Semantik in Kap.

Mehr

Thomas Behr. 17. November 2011

Thomas Behr. 17. November 2011 in in Fakultät für Mathematik und Informatik Datenbanksysteme für neue Anwendungen FernUniversität in Hagen 17. November 2011 c 2011 FernUniversität in Hagen Outline in 1 2 3 4 5 6 - Was ist das? in über

Mehr

Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Semantische Modelle nebenläufiger Programmiersprachen. Einleitung

Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Semantische Modelle nebenläufiger Programmiersprachen. Einleitung Stand der Folien: 24. Januar 2012 Übersicht Aktuelle Themen zu Informatik der Systeme: Nebenläufige Programmierung: Praxis und Semantik Semantische Modelle nebenläufiger Programmiersprachen 1 2 Call-by-Name

Mehr

Vorsemesterkurs Informatik Sommersemester Aufgabenblatt Nr. 5A. Lösung zu Aufgabe 1 (Fehler in Haskell-Quelltext: Parsefehler)

Vorsemesterkurs Informatik Sommersemester Aufgabenblatt Nr. 5A. Lösung zu Aufgabe 1 (Fehler in Haskell-Quelltext: Parsefehler) Fachbereich Informatik und Mathematik Institut für Informatik Vorsemesterkurs Informatik Sommersemester 2017 Aufgabenblatt Nr. 5A zu Aufgabe 1 (Fehler in Haskell-Quelltext: Parsefehler) Laden Sie von der

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

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

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

Verarbeitung unendlicher Datenstrukturen Jetzt können wir z.b. die unendliche Liste aller geraden Zahlen oder aller Quadratzahlen berechnen:

Verarbeitung unendlicher Datenstrukturen Jetzt können wir z.b. die unendliche Liste aller geraden Zahlen oder aller Quadratzahlen berechnen: Verarbeitung unendlicher Datenstrukturen Jetzt können wir z.b. die unendliche Liste aller geraden Zahlen oder aller Quadratzahlen berechnen: take 1 0 ( f i l t e r ( fn x => x mod 2=0) nat ) ; val it =

Mehr

Die Komplement-Funktion

Die Komplement-Funktion Die Komplement-Funktion type IntMap α = [(Int, α)] compl :: [α] (Int, IntMap α) compl s = let n = (length s) 1 t = [0..n] g = zip t s g = filter (λ(i, _) notelem i (get t)) g in (n + 1, g ) Zum Beispiel:

Mehr

Programmierung und Modellierung

Programmierung und Modellierung Programmierung und Modellierung Typüberprüfung und Typinferenz Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 Inhalt Kap. 5 Typüberprüfung und Typinferenz 1. Typaussagen 2. Typisierungsaxiome

Mehr

expr :: Expr expr = Mul (Add (Const 3) (Const 4)) (Div (Sub (Const 73) (Const 37)) (Const 6))

expr :: Expr expr = Mul (Add (Const 3) (Const 4)) (Div (Sub (Const 73) (Const 37)) (Const 6)) 1 - Korrektur 2 - Abstrakte Datentypen für arithmetische Ausdrücke Der Datentyp Wir beginnen zunächst mit dem algebraischen Datentyp für Ausdrücke. Hierfür definieren wir einen Konstruktor Number für Zahlen,

Mehr

Compilerbau. Martin Plümicke WS 2018/19

Compilerbau. Martin Plümicke WS 2018/19 Compilerbau Martin Plümicke WS 2018/19 Agenda I. Überblick Vorlesung Literatur II. Compiler Überblick III. Überblick Funktionale Programmierung Einleitung Haskell-Grundlagen IV. Compiler Scanner Parser

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

Grundlagen der Programmierung 2 (2.A)

Grundlagen der Programmierung 2 (2.A) Grundlagen der Programmierung 2 (2.A) Prof. Dr. Manfred Schmidt-Schauß Künstliche Intelligenz und Softwaretechnologie 5. Mai 2011 Listen und Listenfunktionen Listen modellieren Folgen von gleichartigen,

Mehr

Grundlagen der Programmierung 2 (1.A)

Grundlagen der Programmierung 2 (1.A) Grundlagen der Programmierung 2 (1.A) Einführung Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2018 Grundlagen der Programmierung 2 Geplanter Inhalt der ersten Hälfte: Programmieren in Haskell Definitionen;

Mehr

Funktionale Programmierung ALP I. λ Kalkül. Teil 2 WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Funktionale Programmierung ALP I. λ Kalkül. Teil 2 WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda ALP I λ Kalkül Teil 2 WS 2012/2013 Lokale Variablennamen Haskell: let x = exp1 in exp2 Lambda: λ exp1. exp2 Einfache Regel: Der Geltungsbereich eines Lambda-Ausdrucks erstreckt sich soweit wie möglich

Mehr

3 Terme und Algebren 3.1 Terme

3 Terme und Algebren 3.1 Terme 3 Terme und Algebren 3.1 Terme In allen formalen Kalkülen benutzt man Formeln als Ausdrucksmittel. Hier betrachten wir nur ihre Struktur - nicht ihre Bedeutung. Wir nennen sie Terme. Terme bestehen aus

Mehr

3 Terme und Algebren 3.1 Terme

3 Terme und Algebren 3.1 Terme 3 Terme und Algebren 3.1 Terme Mod - 3.1 In allen formalen Kalkülen benutzt man Formeln als Ausdrucksmittel. Hier betrachten wir nur ihre Struktur - nicht ihre Bedeutung. Wir nennen sie Terme. Terme bestehen

Mehr

Optimierungen in einer formalen Semantik Konstantenfaltung und Konstantenpropagation

Optimierungen in einer formalen Semantik Konstantenfaltung und Konstantenpropagation Optimierungen in einer formalen Semantik Konstantenfaltung und Konstantenpropagation http://pp.info.uni-karlsruhe.de/lehre/ss2011/tba/ LEHRSTUHL PROGRAMMIERPARADIGMEN 0 KIT SS Universität 2011 desdenis

Mehr

Praktische Informatik 3: Funktionale Programmierung Vorlesung 5 vom : Funktionen Höherer Ordnung I

Praktische Informatik 3: Funktionale Programmierung Vorlesung 5 vom : Funktionen Höherer Ordnung I 16:02:05 2017-01-17 1 [38] Praktische Informatik 3: Funktionale Programmierung Vorlesung 5 vom 15.11.2016: Funktionen Höherer Ordnung I Christoph Lüth Universität Bremen Wintersemester 2016/17 PI3 WS 16/17

Mehr

Was Sie schon immer über funktionale Programmierung wissen wollten, aber bisher nicht zu fragen wagten

Was Sie schon immer über funktionale Programmierung wissen wollten, aber bisher nicht zu fragen wagten Programmieren in PPL Was Sie schon immer über funktionale Programmierung wissen wollten, aber bisher nicht zu fragen wagten PPL at a glance KIV ist im wesentlichen in PPL programmiert PPL (proof programming

Mehr

Grundlagen der Programmierung 2 (1.A)

Grundlagen der Programmierung 2 (1.A) Grundlagen der Programmierung 2 (1.A) Einführung Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2017 Grundlagen der Programmierung 2 Geplanter Inhalt der ersten Hälfte: Programmieren in Haskell Definitionen;

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