Semantik und Analyse von Funktionalen Programmen (SAFP):

Größe: px
Ab Seite anzeigen:

Download "Semantik und Analyse von Funktionalen Programmen (SAFP):"

Transkript

1 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

2 LR: Syntax E ::= V (c E 1... E ar(c) ) (seq E 1 E 2 ) (case T E Alt 1... Alt T ) (E 1 E 2 ) (λ V.E) (letrec V 1 = E 1,..., V n = E n in E) Alt ::= (P at E) P at ::= (c V 1... V ar(c) ) Definition: Ein Wert (bzw Value) ist Eine Abstraktion Ein Konstruktor-Anwendung (zb (Cons s t)) EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 2/37

3 LR: Reduktions-Regeln (lbeta) C[((λx.s) S r) C[(letrec x = r in s)] (cp-in) (letrec x 1 = v S, {x i = x i 1 } m i=2, Env in C[xV m]) (letrec x 1 = v, {x i = x i 1 } m i=2, Env in C[v]) wobei v eine Abstraktion (cp-e) (letrec x 1 = v S, {x i = x i 1 } m i=2, Env, y = C[xV m] in r) (letrec x 1 = v, {x i = x i 1 } m i=2, Env, y = C[v] in r) wobei v eine Abstraktion (llet-in) (letrec Env 1 in (letrec Env 2 in r) S ) (letrec Env 1, Env 2 in r) (llet-e) (letrec Env 1, x = (letrec Env 2 in s x ) S in r) (letrec Env 1, Env 2, x = s x in r) (lapp) C[((letrec Env in t) S s)] C[(letrec Env in (t s))] (lcase) C[(case T (letrec Env in t) S alts)] C[(letrec Env in (case T t alts))] EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 3/37

4 LR: Reduktions-Regeln (seq-c) C[(seq v S t)] C[t] wenn v ein Value (seq-in) (letrec x 1 = v S, {x i = x i 1 } m i=2, Env in C[(seq xv m t)]) (letrec x 1 = v, {x i = x i 1 } m i=2, Env in C[t]) wenn v ein Value (seq-e) (letrec x 1 = v S, {x i = x i 1 } m i=2, Env, y = C[(seq xv m t)] in r) (letrec x 1 = v, {x i = x i 1 } m i=2, Env, y = C[t] in r) wenn v ein Value (lseq) C[(seq (letrec Env in s) S t)] C[(letrec Env in (seq s t))] EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 4/37

5 LR: Reduktions-Regeln (case-c) C[(case T (c i t ) S... ((c i y ) t)...)] C[(letrec {y i = t i } n i=1 in t)] wobei n = ar(c i ) 1 (case-c) C[(case T c S i... (c i t)...)] C[t] wenn ar(c i ) = 0 (case-in) letrec x 1 = (c i t ) S, {x i = x i 1 } m i=2, Env in C[case T x V m... ((c i z )... t)...] letrec x 1 = (c i y ), {yi = t i } n i=1, {x i = x i 1 } m i=2, Env in C[(letrec {z i = y i } n i=1 in t)] wobei n = ar(c i ) 1 und y i frische Variablen (case-in) letrec x 1 = c S i, {x i = x i 1 } m i=2, Env in C[case T x V m... (c i t)...] letrec x 1 = c i, {x i = x i 1 } m i=2, Env in C[t] wenn ar(c i ) = 0 EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 5/37

6 LR: Reduktions-Regeln (case-e) letrec x 1 = (c i t ) S, {x i = x i 1 } m i=2, u = C[case T x V m... ((c i z ) r1 )... ], Env in r 2 letrec x 1 = (c i y ), {yi = t i } n i=1, {x i = x i 1 } m i=2, u = C[(letrec z 1 = y 1,..., z n = y n in r 1 )], Env in r 2 wobei n = ar(c i ) 1 und y i frische Variablen (case-e) letrec x 1 = c S i, {x i = x i 1 } m i=2, u = C[case T x V m... (c i r 1 )...], Env in r 2 letrec x 1 = c i, {x i = x i 1 } m i=2..., u = C[r 1], Env in r 2 wenn ar(c i ) = 0 EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 6/37

7 Reduktionskontext: Normalordnungsredex-Suche Markierungs-Algorithmus; T = Top, S = Sub, V = Visited (letrec Env in t) T (letrec Env in t S ) V (s t) S T (s S t) V (seq s t) S T (seq s S t) V (case T s alts) S T (case T s S alts) V (letrec x = s, Env in C[x S ]) (letrec x = s S, Env in C[x V ]) (letrec x = s, y = C[x S ], Env in t) (letrec x = s S, y = C[x V ], Env in t) wenn C[x] x (letrec x = s, y = x S, Env in t) (letrec x = s S, y = x W, Env in t) C ist ein Reduktions-Kontext, wenn das Loch des Kontexts markiert wird mit obigen Algorithmus. C ist Surface-Kontext, wenn das Loch des Kontexts nicht innerhalb einer Abstraktion ist. EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 7/37

8 Reduktionen: Gruppen von Regeln Gruppen von Reduktionen: beta cp-reduktionen case-reduktionen seq-reduktionen Let-Verschiebungen Vergleich mit KFPT: Ohne Sharing LR (mit) Sharing beta lbeta cp-reduktionen case case-reduktionen seq seq-reduktionen Let-Verschiebungen EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 8/37

9 WHNFs Definition Eine weak head normal form (WHNF) ist Ein Value v. Ein Ausdruck (letrec Env in v), wobei v ein Value Ein Ausdruck der Form (letrec x 1 = v, {x i = x i 1 } m i=2, Env in x m), wobei v = (c t ). EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 9/37

10 NO-Beispiel Normalordnungsreduktion von Ω = (λz.(z z)) (λx.(x x)): (λz.(z z)) (λx.(x x)) n,lbeta (letrec z = λx.(x x) in (z z)) n,cp (letrec z = λx.(x x) in ((λx 1.(x 1 x 1 )) z)) n,lbeta (letrec z = λx.(x x) in (letrec x 1 = z in (x 1 x 1 ))) n,llet (letrec z = λx.(x x), x 1 = z in (x 1 x 1 )) LR-Reduktion: n,cp (letrec z = λx.(x x), x 1 = z in ((λx 2.(x 2 x 2 )) x 1 )) n,lbeta letrec z = λx.(x x), x 1 = z in (letrec x 2 = x 1 in (x 2 x 2 ) n,llet letrec z = λx.(x x), x 1 = z, x 2 = x 1 in (x 2 x 2 ) EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 10/37

11 NO-Beispiel Normalordnungsreduktion von letrec u = True : Nil, y = u, x = (λz.z) y in case x of Nil -> 1; x : xs -> 0 letrec u = True : Nil, y = u, x = (λz.z) y in... n,lbeta letrec u = True : Nil, y = u, x = (letrec z = y in z) in... n,llet letrec u = True : Nil, y = u, x = z, z = y in case x of True -> 1; False -> 0 n,case letrec u = True : Nil, y = u, x = z, z = y in (letrec x = True, xs = Nil in 1) n,llet letrec u = True : Nil, y = u, x = z, z = y, x = True, xs = Nil in 1) WHNF EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 11/37

12 Einschub: Abstrakte Maschine Sestofts Abstrakte Maschine Mark1 EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 12/37

13 Das Maß für let-reduktionen Das Maß µ lll (t) ist ein Paar (µ 1 (t), µ 2 (t)), lexikographisch geordnet. µ 1 (t) ist die Anzahl der letrec-unterausdrücke in t µ 2 (t) ist die Summe der lrdepth(c) aller letrec-unterausdrücke s von t wobei C definiert ist durch t = C[s], und wobei lrdepth so definiert ist: lrdepth([ ]) = { lrdepth(c lrdepth(c (1) [C []]) = []) wenn C (1) kein letrec lrdepth(c []) wenn C (1) ein letrec C (1) ist ein Kontext dessen Loch in Tiefe 1 ist. Lemma: Die let-reduktionen machen das Maß µ lll (.) echt kleiner. D.h. die (lll)-reduktion terminiert (mit einer lll-nf) EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 13/37

14 Kontextuelle Ordnung und Gleichheit Definition s c t gdw C[ ] : C[s] = C[t] s c t gdw s c t t c s Kontext Lemma Seien s, t Ausdrücke. Wenn für alle Reduktions-Kontexte R: (R[s] = R[t] ), dann auch C : (C[s] = C[t] ); d.h. s c t. Beweis: mit Induktion (konzeptuell einfach wg. Sharing) EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 14/37

15 Weitere Transformationen (gc1) (letrec {x i = s i } n i=1, Env in t) (letrec Env in t) if for all i : x i does not occur in Env nor in t (gc2) (letrec {x i = s i } n i=1 in t) t if for all i : x i does not occur in t (cpx-in) (letrec x = y, Env in C[x]) (letrec x = y, Env in C[y]) wobeiy Variable undx y (cpx-e) (letrec x = y, z = C[x], Env in t) (letrec x = y, z = C[y], Env in t) (cpax) (letrec x = y, Env in s) (letrec x = y, Env[y/x] in s[y/x]) where y is a variable, x y and y FV (s, Env) (cpcx-in) (letrec x = c t, Env in C[x]) wobei y Variable und x y (letrec x = c y, {y i = t i } ar(c) i=1, Env in C[c y ]) (cpcx-e) (letrec x = c t, z = C[x], Env in t) (letrec x = c y, {y i = t i } ar(c) i=1, z = C[c y ], Env in t) EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 15/37

16 Weitere Transformationen (abs) (letrec x = c t, Env in s) (letrec x = c x, {x i = t i } ar(c) i=1, Env in s) wobei ar(c) 1 (abse) (c t ) (letrec {x i = t i } ar(c) i=1 in c x ) wobei ar(c) 1 (xch) (letrec x = t, y = x, Env in r) (letrec y = t, x = y, Env in r) (ucp1) (letrec Env, x = t in S[x]) (letrec Env in S[t]) (ucp2) (letrec Env, x = t, y = S[x] in r) (letrec Env, y = S[t] in r) (ucp3) (letrec x = t in S[x]) S[t] wobei in (ucp):, x hat höchstens eine Vorkommen in S[x] und kein Vorkommen in Env, t, r; und S ist Surface Kontext (lwas) W (1) [(letrec Env in s)] (letrec Env in W (1) [s]) wobei W (1) schwacher Applikations-Surface Kontext mit Lochtiefe 1 EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 16/37

17 Weitere Transformationen (cpcxnoa) (letrec x = c x 1... x m, Env in C[x]) (letrec x = c x 1... x m, Env in C[c x 1... x m ]) (case-cx) letrec x = (c T,j x 1... x n ), Env in C[case T x ((c T,j y 1... y n ) s) alts] letrec x = (c T,j x 1... x n ), Env in C[(letrec y 1 = x 1,..., y n = x n in s)] (case-cx) letrec x = (c T,j x 1... x n ), Env, y = C[case T x ((c T,j y 1... y n ) s) alts] in r letrec x = (c x 1... x n ), Env, y = C[(letrec y 1 = x 1,..., y n = x n in s)] in r (case-cx) like (case) in all other cases EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 17/37

18 Korrekheiten Satz Alle Reduktionen und Transformationen in LR sind korrekt: d.h. s trans t = s c t trans wobei eine Reduktion oder Transformation aus den Tabellen ist. Das hat die Konsequenz, dass die Konversionsgleichheit die LR, kontextuelle Gleichheit impliziert: c. LR, Aber: c. EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 18/37

19 Längenmaße von Normalordnungsreduktionen Definition Sei t ein geschlossener Ausdruck. nor(t) ist definiert als die Normalordnungsreduktion von t bis zur WHNF. Dann 1 Wenn M {case,lbeta,seq,cp,lll}, dann ist rl M (t) die Anzahl der Normalordnungs-Reduktionen a in nor(t) mit a M. 2 rl (t) := rl {case,lbeta,seq} (t). 3 rl (t) := rl {case,lbeta,seq,cp} (t). 4 rl (t) := rl {lll} (t). 5 rl(t) := rl {case,lbeta,seq,cp,lll} (t). Das wichtigste Maß ist rl ( ) = rln( ). EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 19/37

20 Längenerhaltung (seq), (case), (cp) angewendet in Surface Kontexten werden notiert als (seqs), (cases), (cps). Zur Erinnerung: Surface Kontexte: Loch nicht in einer Abstraktion. EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 20/37

21 Längenerhaltung Satz Seien t 1, s 1 geschlossene Ausdrücke mit t 1 und t 1 s 1 mit einer Basisreduktion oder einer Extra Transformation. Dann gilt s 1 und das folgende: 1 Wenn t 1 a s1 mit a {case, seq, lbeta, cp}, then rl(t 1 ) rl(s 1 ), rl (t 1 ) rl (s 1 ) and rl (t 1 ) rl (s 1 ). S,a 2 If t 1 s 1 with a {cases, seqs, lbeta, cps}, dann rl (t 1 ) rl (s 1 ) rl (t 1 ) 1 und rl (t 1 ) rl (s 1 ) rl (t 1 ) 1. Für a = cps, gilt die Gleichung rl (t 1 ) = rl (s 1 ). 3 Wenn t 1 a s1 mit a {lll, gc}, dann rl(t 1 ) rl(s 1 ), rl (t 1 ) = rl (s 1 ) and rl (t 1 ) = rl (s 1 ). Für a = gc1 gilt zusätzlich rl(t 1 ) = rl(s 1 ). 4 Wenn t 1 a s1 mit a {cpx, cpax, xch, cpcx, abs}, dann rl(t 1 ) = rl(s 1 ), rl (t 1 ) = rl (s 1 ) und rl (t 1 ) = rl (s 1 ). 5 Wenn t 1 ucp s 1, dann rl(t 1 ) rl(s 1 ), rl (t 1 ) rl (s 1 ) and rl (t 1 ) = rl (s 1 ). EFP LR: Sharing und Striktheitsanalyse lwas SAFP; WS 2017/18 M. Schmidt-Schauß 21/37

22 Längenerhaltung: Vergleich nicht-normalordnungs-reduktionen in Surface Kontexten, zb im Argument: Reduktion call-by-need (LR) call-by-name beta/lbeta -1 -n: unbeschränkt case -1 -n: unbeschränkt EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 22/37

23 Tiefe Unterterme Definition. Sei t = (letrec Env, x = t x, x 1 = t 1 in x 1 ). t x ist ein tiefer Unterterm in t wenn t 1 eine Anwendung, eine seq-ausdruck, oder ein case-ausdruck ist. Aussage Sei t 1 = (letrec Env, x = t x, x 1 = t 1 in x 1) geschlossen; und t 1, und t x sei strikter und tiefer Unterterm von t 1. Dann rl (t 1 ) > rl (letrec Env, x = t x in x). (letrec Env, x = t x in x) wirkt wie ein Unterterm von t 1. EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 23/37

24 Abstrakte Reduktion Basis-Reduktionen: Kalkül-Reduktionen Extra-Reduktionen Bot-Reduktionen Tableau geschlossen, wenn alle Blätter entweder sind, oder ein Vorgänger existiert, wobei (nach verschiedenen Kriterien) der Vorgänger das Blatt subsumiert oder einen Unterterm des Blatts; und eine Normalordnungsreduktion dazwischen, die das rl (.)-Maß kleiner macht. EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 24/37

25 Bot-Reduktionen Folgende Ausdrücke können in Tableau zu reduziert werden: ( t), (seq t), ((c t ) r), Ausdrücke die direkt ungetypt sind (unter Beachtung der Umgebung) (f t 1... t i 1 t i+1... t n ), wenn f strikt im i-ten Argument. und folgende Transformationen: (letrec x =, Env in C[x]) (letrec x =, Env in C[ ]) (letrec x =, Env, y = C[x] in t) (letrec x =, Env, y = C[ ] in t) (letrec x = x, Env in r) (letrec x =, Env in r) EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 25/37

26 Änderungen der Reduktionsstrategie durch Striktheit Statt Normalordnung: eine strikte Auswertung: In Surface Kontexten können strikte Unterterme ausgewertet werden. Die Reduktionslänge rl (.) ( bzgl (case), (lbeta), (seq)) bzgl. Normalordnung und strikter Strategie ist unverändert Bzgl der anderen Reduktionsarten: unklares Bild. D.h. ein Optimierungseffekt wird nur in der abstrakten Maschine sichtbar. denn die Reduktionslängen rl (.) sind durch Sharing schon optimal. EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 26/37

27 Striktheits-Analyse: ein Beispiel letrec len = λlst.lenr lst 0 lenr = λlst.λs. case lst lst (Nil s) (x : xs (letrec z = 1 + s in lenr xs z)) in... := { } Fun (c 1... )... (c N... ) wobei c 1,..., c N alle Konstruktoren sind. wobei Fun Menge aller geschlossenen Abstraktionen. Inf := { } ( : Inf ) EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 27/37

28 Striktheits-Analyse: Beispiel lenr lenr lbeta case lst (Nil ) (x : xs lenr xs ( + 1)) case lst (Nil ) (x : xs lenr xs ) case lst ( : ) (Nil ) (x : xs lenr xs ) case lenr case lst Nil... EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 28/37

29 Striktheits-Analyse Beispiel lenr Inf lbeta case lst Inf (Nil ) (x : xs lenr xs ( + 1)) case lst ( : Inf ) (Nil ) (x : xs lenr xs ( + 1)) case lenr Inf ( + 1) generalize lenr Inf EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 29/37

30 Striktheits-Analyse: Beispiel zu Sharing f = λx.λz.g x x z g = λx.λy.λz. if x then (if y then z else False) else (if y then False else z) Ist f strikt im zweiten Argument? : (letrec top =, f =, g = in f top ) Abstrakte Reduktion: (letrec top =, f =, g =,... in g top top ) Variable top kommt zweimal vor EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 30/37

31 Striktheits-Analyse: Beispiel zu Sharing letrec top = in if top then (if top then else False) else (if top then False else ) True -Fall: letrec top = in if True then (if True then else False) else (if True then False else ) ergibt. Der False Fall und ungetypte Fälle gehen genauso. Andere Analyse-Verfahren können das nicht, da die Gleichheit der s verlorengeht. EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 31/37

32 Striktheits-Analyse: Anmerkungen Todo: Auswirkungen auf Parallelisierung der Auswertung Todo: Nachweis, dass Auswertungsumstellung eine Optimierung in abstrakten Maschinen ist. Todo: Verbesserungen im Kalkül mit Sharing. Todo: Polymorphe Typen im Kalkül mit Sharing. Wie sieht Striktheitsanalyse aus in Concurrent Haskell? EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 32/37

33 Striktheits-Analyse: Anmerkungen Todo: Auswirkungen auf Parallelisierung der Auswertung Todo: Nachweis, dass Auswertungsumstellung eine Optimierung in abstrakten Maschinen ist. kommt: Verbesserungen/ Optimierungen in LR kommt: Polymorphes LR Wie sieht Striktheitsanalyse aus in Concurrent Haskell? EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 32/37

34 Polymorphes LR Type variables: a A set of type variables Term variables: x, x i X set of term variables Types: τ Typ := a (τ 1 τ 2 ) (K τ 1... τ ar(k) ) Polymorphic ρ PTyp := τ λa.ρ types: Expressions: e Expr F := x : ρ u (e τ) (e 1 e 2 ) (c : τ e 1... e ar(c) ) (seq e 1 e 2 ) letrec x 1 : ρ 1 = e 1,..., x n : ρ n = e n in e case K e of (p 1 -> e 1 )... (p n -> e n ) there is a pattern p for every constructor in D K Polymorphic u PExpr F := x : λa.ρ λx : τ.e (u τ) Λa.u expressions Case-patterns: p := (c : τ x 1 : τ 1... x ar(c) : τ ar(c) ) where x i are different term variables EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 33/37

35 Polymorphes LR, Beispiele Der polymorphe K-Kombinator λx.λy.x sieht jetzt so aus: K := Λa.Λb.λx : a.λy : b.x Typisierung ergibt: λa.λb.a (b a). das ist genau analog zu: a, b : a (b a). Λa.Λb.... Das ist ein λ für Typen. Die Typinstanziierung wird mittels Reduktion modelliert. Nach der Kompilierung kann man das weglassen, da es nicht zum Ergebnis beiträgt und nicht abgefragt werden kann. EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 34/37

36 Polymorphes LR Anwenden von K := Λa.Λb.λx : a.λy : b.x auf drei Argumente: Bool, eine Typvariable a, True vom Typ Bool Reduktion ergibt: (Λa.Λb.λx : a, λy : b.x) Bool a True (letrec x : Bool = True in λy : a.x) EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 35/37

37 Beispiel map map (letrec map = λf.λxs.case xs of Nil Nil; (y : ys) f y : map f ys in map) polymorphic map in L F (letrec map:: λa.λb.(a b) (List a) (List b) = Λa.Λb.λf:: (a b).λxs:: (List a).case xs of Nil:: (List a) Nil :: (List b); (Cons:: a (List a) (List a) (y:: a) (ys:: List a)) Cons:: (List b) (f y) (map a b f ys) in map) EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 36/37

38 Beispiel map Verwendung von map z.b. als Funktion von Int Int: (cp) des voll polymorphen map, dann Typinstanziierung durch Reduktion: (innerhalb des in-expressions): map Int Int λf:: (Int Int).λxs:: (List Int).case xs of Nil:: (List Int) Nil :: (List Int); (Cons:: Int (List Int) (List Int) (y:: Int) (ys:: List a)) Cons:: (List Int) (f y) (map Int Int f ys) EFP LR: Sharing und Striktheitsanalyse SAFP; WS 2017/18 M. Schmidt-Schauß 37/37

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

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

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

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

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

Ü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

1 Einleitung. 2 Normalordnungsreduktion. 3 Anwendungsordnung. 4 Verzögerte Auswertung. 5 Programmieren mit let in Haskell.

1 Einleitung. 2 Normalordnungsreduktion. 3 Anwendungsordnung. 4 Verzögerte Auswertung. 5 Programmieren mit let in Haskell. Stand der Folien: 25. Oktober 2010 Übersicht Einführung in die Funktionale Programmierung: Funktionale Kernsprachen: Einleitung & Der Lambda-Kalkül Dr. David Sabel 1 Einleitung 2 Normalordnungsreduktion

Mehr

Semantics of a Call-by-Need Lambda Calculus with McCarthy s amb for Program Equivalence

Semantics of a Call-by-Need Lambda Calculus with McCarthy s amb for Program Equivalence Semantics of a Call-by-Need Lambda Calculus with McCarthy s amb for Program Equivalence David Sabel Institut für Informatik Fachbereich Informatik und Mathematik Goethe-Universität Frankfurt Kolloquium

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

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

Semantics of a Call-by-Need Lambda Calculus with McCarthy s amb for Program Equivalence

Semantics of a Call-by-Need Lambda Calculus with McCarthy s amb for Program Equivalence Semantics of a Call-by-Need Lambda Calculus with McCarthy s amb for Program Equivalence David Sabel Goethe-Universität, Frankfurt 19. August 2008 Einleitung Übersicht 1 Motivation und Einleitung 2 Der

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

Automatische Prüfung und Berechnung von Überlappungen zum Vollständigkeitsnachweis von Diagrammen in Programmiersprachen höherer Ordnung

Automatische Prüfung und Berechnung von Überlappungen zum Vollständigkeitsnachweis von Diagrammen in Programmiersprachen höherer Ordnung Johann Wolfgang Goethe-Universität Frankfurt am Main Fachbereich Informatik und Mathematik Institut für Informatik Diplomarbeit Automatische Prüfung und Berechnung von Überlappungen zum Vollständigkeitsnachweis

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

Einführung in die Funktionale Programmierung:

Einführung in die Funktionale Programmierung: Einführung in die Funktionale Programmierung: Funktionale Kernsprachen: Einleitung & Der Lambda-Kalkül Prof. Dr. M. Schmidt-Schauß WS 2014/15 Stand der Folien: 16. Oktober 2014 Übersicht 1 Einleitung 2

Mehr

Grundlagen der Programmierung 2. Operationale Semantik

Grundlagen der Programmierung 2. Operationale Semantik Grundlagen der Programmierung 2 Operationale Semantik Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 29. April 2009 Semantik von Programmiersprachen Semantik = Bedeutung

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

Abstrakte Maschinen und Kode-Erzeugung für Haskell

Abstrakte Maschinen und Kode-Erzeugung für Haskell Abstrakte Maschinen und Kode-Erzeugung für Haskell Implementierung der Reduktion: Compilierung: Terme als Bäume, Reduktion als Transformation auf Bäumen Terme als gerichtete Graphen, Template-Instantiation,

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

Interpreter (Hilfsfunktionen)

Interpreter (Hilfsfunktionen) Interpreter (Hilfsfunktionen) -- Berechnet die Liste der gebundenen Variablen boundlist :: Expr -> [String] boundlist (Var x) = [] boundlist (Lambda x e) = x : (boundlist e) boundlist (App e1 e2) = (boundlist

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

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

Ü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

Mugda - Abhängige Typen und Termination-Checking

Mugda - Abhängige Typen und Termination-Checking Mugda - Abhängige Typen und Termination-Checking Karl Mehltretter 1. Februar 2008 Dependent Types Martin-Löf Typentheorie Beweissysteme wie Coq, Lego (proofs as programs). Programmiersprachen: Agda, Epigram.

Mehr

Inhaltsverzeichnis. 1 Polynomordungen [9 Punkte] 2. 2 System F [9 Punkte] 3. 3 Strukturelle Induktion und Folds [9 Punkte] 4

Inhaltsverzeichnis. 1 Polynomordungen [9 Punkte] 2. 2 System F [9 Punkte] 3. 3 Strukturelle Induktion und Folds [9 Punkte] 4 Inhaltsverzeichnis Polynomordungen [9 Punkte] 2 2 System F [9 Punkte] 3 3 Strukturelle Induktion und Folds [9 Punkte] 4 4 Korekursion und Koinduktion [9 Punkte] 5 5 Automatenminimierung [5 Punkte] 6 Seite:

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

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

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

Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten.

Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten. 4.5.5 Rekursive Typen Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten. datatype IntList = Nil Cons o f ( i n t IntList ) ; Damit

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

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

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

Ü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

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

Praktikum Funktionale Programmierung Teil 2: Typecheck und Transformation

Praktikum Funktionale Programmierung Teil 2: Typecheck und Transformation Praktikum Funktionale Programmierung Teil 2: Typecheck und Transformation Dr. David Sabel Sommersemester 2015 Stand der Folien: SoSe 2015 Übersicht FP-PR Teil 2: Typecheck und Transformation 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

5.1 Abstrakte Interpretation, insbesondere zur Striktheitsanalyse

5.1 Abstrakte Interpretation, insbesondere zur Striktheitsanalyse Funktionale Programmierung: Analyse WS 2009/10, Abstrakte Interpretation, 4. Februar 2010 1 5.1 Abstrakte Interpretation, insbesondere zur Striktheitsanalyse Die Idee der Methode der abstrakten Interpretationen

Mehr

Einführung in das λ-kalkül

Einführung in das λ-kalkül Einführung in das λ-kalkül Max Wagner IPD Snelting 1 3.11.2017 Max Wagner - Einführung in das λ-kalkül IPD KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Syntax Abstrakte Syntax:

Mehr

Operationale Semantik: Haskell

Operationale Semantik: Haskell Kapitel 4 Operationale Semantik: Haskell 4.1 Semantik von Programmiersprachen Programme sind zunächst mal nur Text. Programme sollen aber etwas im Rechner bewirken bzw. eine Funktion oder Funktionalität

Mehr

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN. Name Vorname Studiengang Matrikelnummer. Hörsaal Reihe Sitzplatz Unterschrift

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN. Name Vorname Studiengang Matrikelnummer. Hörsaal Reihe Sitzplatz Unterschrift TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen WS 2008/09 Einführung in die Informatik 2 Klausur Prof. Dr. Helmut Seidl, T. M. Gawlitza, S. Pott,

Mehr

Theorembeweiserpraktikum SS 2016

Theorembeweiserpraktikum SS 2016 Institut für Programmstrukturen und Datenorganisation Lehrstuhl Programmierparadigmen Am Fasanengarten 5 76131 Karlsruhe http://pp.ipd.kit.edu/ Theorembeweiserpraktikum SS 2016 http://pp.ipd.kit.edu/lehre/ss2016/tba

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

Reduktionssysteme und Termersetzungssysteme

Reduktionssysteme und Termersetzungssysteme Reduktionssysteme und Termersetzungssysteme Untersuchung von Berechnungen mittels Reduktionsregeln Simplifikation von: Datenstrukturen / Termen usw. Erkennen von gleichen Objekten durch Normalisierung

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

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

3 Exkurs: Der λ-kalkül

3 Exkurs: Der λ-kalkül 3 Exkurs: Der λ-kalkül Alonso Churchs λ-kalkül (ca. 1940) ist der formale Kern jeder funktionalen Programmiersprache. Der λ-kalkül ist eine einfache Sprache, mit nur wenigen syntaktischen Konstrukten und

Mehr

Klausur Programmierung WS 2002/03

Klausur Programmierung WS 2002/03 Klausur Programmierung WS 2002/03 Prof. Dr. Gert Smolka, Dipl. Inf. Thorsten Brunklaus 14. Dezember 2002 Leo Schlau 45 Vor- und Nachname Sitz-Nr. 4711 007 Matrikelnummer Code Bitte öffnen Sie das Klausurheft

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

Formale Methoden in der Informatik Wiederholung klassische Logik Konkrete Datentypen (algebraische Strukturen) Abstrakte Datentypen

Formale Methoden in der Informatik Wiederholung klassische Logik Konkrete Datentypen (algebraische Strukturen) Abstrakte Datentypen Was bisher geschah Formale Methoden in der Informatik Wiederholung klassische Logik Konkrete Datentypen (algebraische Strukturen) Abstrakte Datentypen Syntax: Signatur Semantik: Axiome (FOL-Formeln, meist

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

Einführung in Haskell

Einführung in Haskell Kapitel 2 Einführung in Haskell Dieses Kapitel enthält eine Einführung in Haskell, eine nicht-strikte funktionale Programmiersprache mit polymorphem Typsystem. Ziel in diesem Kapitel ist: Darstellung der

Mehr

Gliederung. Funktionale Programmierung. Pattern matching in Haskell. Pattern matching in ERLANG. Materialien zur Vorlesung

Gliederung. Funktionale Programmierung. Pattern matching in Haskell. Pattern matching in ERLANG. Materialien zur Vorlesung Gliederung Funktionale Programmierung Materialien zur Vorlesung D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg 1 Sommer 2011, 7.

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

Konzepte von Programmiersprachen

Konzepte von Programmiersprachen Konzepte von Programmiersprachen Kapitel 3: Ausdrücke Phillip Heidegger Universität Freiburg, Deutschland SS 2009 Phillip Heidegger (Univ. Freiburg) Konzepte von Programmiersprachen KvP 1 / 17 Inhalt Let

Mehr

Grundlagen der Programmierung 2 (2.B)

Grundlagen der Programmierung 2 (2.B) Grundlagen der Programmierung 2 (2.B) Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 11. Juni 2008 Reduktionsregel zum case case-reduktion (case (c t 1... t n ) of... (c

Mehr

Einführung in die Informatik 2

Einführung in die Informatik 2 Technische Universität München Fakultät für Informatik Prof. Tobias Nipkow, Ph.D. Manuel Eberl, Lars Hupel, Lars Noschinski Wintersemester 2014/15 Lösungsblatt Endklausur 13. Februar 2015 Einführung in

Mehr

Workshop Einführung in die Sprache Haskell

Workshop Einführung in die Sprache Haskell Workshop Einführung in die Sprache Haskell Nils Rexin, Marcellus Siegburg und Alexander Bau Fakultät für Informatik, Mathematik und Naturwissenschaften Hochschule für Technik, Wirtschaft und Kultur Leipzig

Mehr

Einführung in Haskell

Einführung in Haskell Kapitel 2 Einführung in Haskell Dieses Kapitel enthält eine Einführung in Haskell, eine nicht-strikte funktionale Programmiersprache mit polymorphem Typsystem. Ziel in diesem Kapitel ist: Darstellung der

Mehr

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

Funktionale Programmierung ALP I. λ Kalkül WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda ALP I λ Kalkül WS 2012/2013 Berechenbarkeit - inspiriert durch Hilbert's Frage - im Jahr 1900, Paris - Internationaler Mathematikerkongress Gibt es ein System von Axiomen, aus denen alle Gesetze der Mathematik

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

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

Einführung in die Informatik 2

Einführung in die Informatik 2 Technische Universität München Fakultät für Informatik Prof. Tobias Nipkow, Ph.D. Lars Noschinski, Dr. Jasmin Blanchette, Dmitriy Traytel Wintersemester 2012/13 Lösungsblatt Endklausur 9. Februar 2013

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

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

Funktionale Programmierung Einführung

Funktionale Programmierung Einführung Einführung Prof. Dr. Oliver Braun Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 13.09.2017 15:29 Inhaltsverzeichnis Was ist imperative Programmierung.......................

Mehr

2.5 Listen. Kurzschreibweise: [42; 0; 16] Listen werden mithilfe von [] und :: konstruiert.

2.5 Listen. Kurzschreibweise: [42; 0; 16] Listen werden mithilfe von [] und :: konstruiert. 2.5 Listen Listen werden mithilfe von [] und :: konstruiert. Kurzschreibweise: [42; 0; 16] # let mt = [];; val mt : a list = [] # let l1 = 1::mt;; val l1 : int list = [1] # let l = [1;2;3];; val l : int

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

Kapitel 5: λ-kalkül und Laziness

Kapitel 5: λ-kalkül und Laziness Funktionale Programmierung (WS2005/2006) 5/1 Kapitel 5: λ-kalkül und Laziness Lernziele dieses Kapitels 1. Syntax des einfachen, ungetypten λ-kalküls Symbolische Manipulation von λ-ausdrücken in Haskell,

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

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

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

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

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

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

Reduktionssysteme Termersetzungssysteme. Keine kritischen Paare. Betrachte Variablenüberlappung:

Reduktionssysteme Termersetzungssysteme. Keine kritischen Paare. Betrachte Variablenüberlappung: Beispiele Beispiel 9.4 Betrachte f (f (x, y), z) f (x, f (y, z)) f (f (x, y ), z ) f (x, f (y, z )) Unifizierbar mit x f (x, y ), y z f (f (f (x, y ), z ), z) t 1 = f (f (x, y ), f (z, z)) f (f (x, f (y,

Mehr

Kontextuelle Gleichheit, Korrektheit, Programmtransformationen, Auswertungsänderung

Kontextuelle Gleichheit, Korrektheit, Programmtransformationen, Auswertungsänderung Skript CEFP, WS 2013/14 Prof. Dr. Manfred Schmidt-Schauß Fachbereich Informatik Johann Wolfgang Goethe-Universität Postfach 11 19 32 D-60054 Frankfurt Germany E-mail:schauss@ki.informatik.uni-frankfurt.de

Mehr

4.1 Bäume, Datenstrukturen und Algorithmen. Zunächst führen wir Graphen ein. Die einfachste Vorstellung ist, dass ein Graph gegeben ist als

4.1 Bäume, Datenstrukturen und Algorithmen. Zunächst führen wir Graphen ein. Die einfachste Vorstellung ist, dass ein Graph gegeben ist als Kapitel 4 Bäume 4.1 Bäume, Datenstrukturen und Algorithmen Zunächst führen wir Graphen ein. Die einfachste Vorstellung ist, dass ein Graph gegeben ist als eine Menge von Knoten und eine Menge von zugehörigen

Mehr

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

HASKELL KAPITEL 2.1. Notationen: Currying und das Lambda-Kalkül HASKELL KAPITEL 2.1 Notationen: Currying und das Lambda-Kalkül Bisheriges (Ende VL-Teil 1) weite :: (Float,Float) ->Float weite (v0, phi) = (square(v0)/9.81) * sin(2 * phi) (10, 30 ) smaller ::(Integer,

Mehr

FAKULTÄT FÜR INFORMATIK

FAKULTÄT FÜR INFORMATIK TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen WS 2008/09 Einführung in die Informatik 2 Übungsblatt 10 Prof. Dr. Helmut Seidl, T. M. Gawlitza,

Mehr

1 Vollständige partielle Ordnungen, stetige Funktionen

1 Vollständige partielle Ordnungen, stetige Funktionen TIDS 2, SS13, Kapitel 1, vom 11.4.2013 1 1 Vollständige partielle Ordnungen, stetige Funktionen Die Betrachtung vollständiger partieller Ordnungen soll eine einfache und verständliche Einführung in einen

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

Übung zur Vorlesung Automatisierte Logik und Programmierung I

Übung zur Vorlesung Automatisierte Logik und Programmierung I Übung zur Vorlesung Automatisierte Logik und Programmierung I Prof. Chr. Kreitz Universität Potsdam, Theoretische Informatik Wintersemester 2008/09 Blatt 3 Abgabetermin: 26.11.08 nach der Übung Das dritte

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

Vorsicht bei redundanten und unvollständigen Matches!

Vorsicht bei redundanten und unvollständigen Matches! Vorsicht bei redundanten und unvollständigen Matches! # let n = 7;; val n : int = 7 # match n with 0 -> "null";; Warning: this pattern-matching is not exhaustive. Here is an example of a value that is

Mehr

ALP I. Funktionale Programmierung

ALP I. Funktionale Programmierung ALP I Funktionale Programmierung Zusammengesetzte Datentypen in Haskell WS 2012/2013 Zusammengesetzte Datentypen Tupel List String Zusammengesetzte Datentypen Tupel-Datentyp Ein Tupel ist eine Ansammlung

Mehr

Beispiele: Funktionsabstraktion (3) Funktionsdeklaration. Funktionsdeklaration (2) Funktionsdeklaration (3) 3. Abstraktion über Funktionsbezeichner:

Beispiele: Funktionsabstraktion (3) Funktionsdeklaration. Funktionsdeklaration (2) Funktionsdeklaration (3) 3. Abstraktion über Funktionsbezeichner: Beispiele: Funktionsabstraktion (3) Funktionsdeklaration 3. Abstraktion über Funktionsbezeichner: Ausdruck: f (f x) Abstraktion: \ f x -> f (f x) Mit Bezeichnervereinbarung: twice = \ f x -> f (f x) erg

Mehr

Funktionale Programmierung

Funktionale Programmierung 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

Mehr

Der untypisierte Lambda-Kalkül als Programmiersprache

Der untypisierte Lambda-Kalkül als Programmiersprache Der untypisierte Lambda-Kalkül als Programmiersprache November 29, 2006 betreut von Prof. Tobias Nipkow Einführung In den 1930er Jahren von Alonzo Church und Stephen Kleene eingeführt Der Lambda-Kalkül

Mehr

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

Funktionale Programmierung. Das Funktionale Quiz. Das Funktionale Quiz. Das Funktionale Quiz Funktionale Programmierung Das Funktionale Quiz 31.5.2005 Nenne eine Gemeinsamkeit zwischen Typklassen und OO-Klassen Das Funktionale Quiz Das Funktionale Quiz Nenne einen Unterschied zwischen Typklassen

Mehr

Einführung in Haskell

Einführung in Haskell Kapitel 2 Einführung in Haskell Dieses Kapitel enthält eine Einführung in Haskell, eine nicht-strikte funktionale Programmiersprache mit polymorphem Typsystem. Ziel in diesem Kapitel ist: Darstellung der

Mehr

Korrektheit von Programmen und Programmiersprachen

Korrektheit von Programmen und Programmiersprachen Korrektheit von Programmen und Programmiersprachen Methoden, Analysen und Anwendungen David Sabel Goethe-Universität, Frankfurt am Main 13. November 2012 Überblick 1. Motivation 2. Grundlagen 3. Korrektheit

Mehr

ProInformatik: Funktionale Programmierung. Punkte

ProInformatik: Funktionale Programmierung. Punkte ProInformatik: Funktionale Programmierung 27.7-22.8.2008, M. Knobelsdorf Probeklausur Ihre persönliche Klausurnummer: Vorname, Nachname: Aufgabe 1 2 3 4 5 6 7 8 Punkte 12 4 4 4 4 2 4 6 40 Erz. Punkte Zum

Mehr

Frage, Fragen und nochmals Fragen

Frage, Fragen und nochmals Fragen Frage, Fragen und nochmals Fragen Berthold Hoffmann Universität Bremen and DFKI Bremen hof@informatik.uni-bremen.de In diesem Text stehen einige Fragen, die man sich zu den Folien der Veranstaltung Funktionales

Mehr