Semantik und Analyse von Funktionalen Programmen (SAFP):
|
|
- Sofia Kopp
- vor 5 Jahren
- Abrufe
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: Sharing und Striktheitsanalyse titleslide Prof. Dr. Manfred Schmidt-Schauß SAFP; WS 2017/18 E ::= V (c E 1... E ar(c) ) (seq E 1
MehrSemantik 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 ::=
MehrLR: 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
MehrEinfü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,
MehrEinfü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
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
Mehr1 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
MehrSemantics 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
MehrEinfü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
MehrConcurrent 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
MehrSemantics 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
MehrFortgeschrittene 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
MehrAutomatische 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
MehrEinfü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
MehrEinfü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
MehrGrundlagen 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
MehrGrundlagen 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
MehrAbstrakte 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,
MehrHaskell, 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
MehrInterpreter (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
MehrGrundlagen 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
MehrAdressen. 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
MehrPraktikum 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: Typisierung Prof Dr. Manfred Schmidt-Schauß WS 2012/13 1 Motivation 2 Typen: Sprechweisen, Notationen und Unifikation 3 Typisierungsverfahren Iteratives
MehrMugda - 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.
MehrInhaltsverzeichnis. 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:
MehrFortgeschrittene 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
MehrEinfü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
MehrDer 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
MehrDie 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
MehrFunktionale 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
MehrWas 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
MehrTheoretische 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: Typisierung Prof Dr. Manfred Schmidt-Schauß 1 Motivation 2 Typen: Sprechweisen, Notationen und Unifikation 3 Typisierungsverfahren Iteratives Typisierungsverfahren
MehrHaskell, 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
MehrPraktikum 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
MehrHaskell, 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
Mehr5.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
MehrEinfü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:
MehrOperationale 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
MehrAllgemeine 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,
MehrTheorembeweiserpraktikum 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
Mehr1. 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
MehrReduktionssysteme und Termersetzungssysteme
Reduktionssysteme und Termersetzungssysteme Untersuchung von Berechnungen mittels Reduktionsregeln Simplifikation von: Datenstrukturen / Termen usw. Erkennen von gleichen Objekten durch Normalisierung
MehrAdressen. 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
MehrPraktische 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
Mehr3 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
MehrKlausur 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
MehrPraktikum 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
MehrFormale 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
MehrVerarbeitung 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 =
MehrEinfü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
MehrGliederung. 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.
MehrLö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
MehrKonzepte 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
MehrGrundlagen 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
MehrEinfü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
MehrWorkshop 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
MehrEinfü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
MehrFunktionale 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
MehrGrundlegende 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
MehrGrundlegende Datentypen
Funktionale Programmierung Grundlegende Datentypen Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 14.11.2017 15:37 Inhaltsverzeichnis Typen........................................
MehrEinfü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
MehrFunktionale 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........................................
MehrGliederung. 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
MehrFunktionale 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.......................
Mehr2.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
MehrGrundlagen 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,
MehrKapitel 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,
MehrGrundlegende 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
MehrWS 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.
MehrWS 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.
MehrListen 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
MehrGrundlagen 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.
MehrWS 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
MehrReduktionssysteme 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,
MehrKontextuelle 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
Mehr4.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
MehrHASKELL 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,
MehrFAKULTÄ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,
Mehr1 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
MehrEinfü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 Prof. Chr. Kreitz Universität Potsdam, Theoretische Informatik Wintersemester 2008/09 Blatt 3 Abgabetermin: 26.11.08 nach der Übung Das dritte
MehrParadigmen 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)]
MehrVorsicht 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
MehrALP 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
MehrBeispiele: 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
MehrFunktionale 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
MehrDer 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
MehrFunktionale 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
MehrEinfü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
MehrKorrektheit 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
MehrProInformatik: 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
MehrFrage, 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