• Keine Ergebnisse gefunden

ade Fak AdéRie 5. i2007

N/A
N/A
Protected

Academic year: 2022

Aktie "ade Fak AdéRie 5. i2007"

Copied!
34
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Frank-André Rieÿ

(2)
(3)

Wofür benötigt man Monaden?

Imperative Programmiersprahen:

(4)

(5)

Wofür benötigt man Monaden?

Imperative Programmiersprahen:

Zugriauf Variablen/Referenzen implizite

Zustandsveränderungmöglih

Exeptions et. Beeinussung des Kontrollusses

zurFehlerbehandlung

(6)

Exeptions et. Beeinussung des Kontrollusses

zurFehlerbehandlung

Funktionale Programmiersprahen:

nur Zugriauf Argumente einerFunktion

Zustandsveränderungen müssen durh explizite

Änderung eines Zustandsobjektes simuliert

(7)

Wofür benötigt man Monaden?

Imperative Programmiersprahen:

Zugriauf Variablen/Referenzen implizite

Zustandsveränderungmöglih

Exeptions et. Beeinussung des Kontrollusses

zurFehlerbehandlung

Funktionale Programmiersprahen:

nur Zugriauf Argumente einerFunktion

Zustandsveränderungen müssen durh explizite

Änderung eines Zustandsobjektes simuliert

werden

Fehlerbehandlung nur explizit über(z.B.

zusammengesetzten) Rükgabewert oder

(8)
(9)

Wünshenswert: Möglihkeit, das Zustandsobjekt

(et.) unsihtbar zu mahen..

..durh Einbau unreiner Züge in die

(10)

..durh Einbau unreiner Züge in die

Programmiersprahe dadurh aber Verlust der

(11)

Wünshenswert: Möglihkeit, das Zustandsobjekt

(et.) unsihtbar zu mahen..

..durh Einbau unreiner Züge in die

Programmiersprahe dadurh aber Verlust der

referenziellen Transparenz (der Wert eines

Ausdruks ist niht mehr unabhängig vom

(12)

..durh Einbau unreiner Züge in die

Programmiersprahe dadurh aber Verlust der

referenziellen Transparenz (der Wert eines

Ausdruks ist niht mehr unabhängig vom

Zeitpunkt seiner Auswertung)

..durh geeignete Abstraktion, die den Zustand

(13)

Funktion ohne Zustand:

x

−→

f

−→

y

f

: α → β

(14)

f

: α → β

Funktion mit explizitem Zustand:

x

z

alt

−→

fZustand

−→

y

z

neu

f

Zustand

: ( α,

s

) → ( β,

s

)

(15)

Funktion mit explizitem Zustand:

x

z

alt

−→

fZustand

−→

y

z

neu

f

Zustand

: ( α,

s

) → ( β,

s

)

(16)

x

z

alt

−→

fZustand

−→

y

z

neu

f

Zustand

: ( α,

s

) → ( β,

s

)

(17)

Funktion mit explizitem Zustand:

x

z

alt

−→

fZustand

−→

y

z

neu

f

Zustand

: ( α,

s

) → ( β,

s

)

Currying..

x

−→

fZustand

−→

z

alt

fZustand

x

y

z

neu

f

Zustand

: α →

s

→ ( β,

s

)

(18)

x

−→

fZustand

−→

z

alt

fZustand

x

y

z

neu

f

Zustand

: α →

s

→ ( β,

s

)

(19)

x

−→

fZustand

−→

z

alt

fZustand

x

y

z

neu

f

Zustand

: α →

s

→ ( β,

s

)

(20)

x

−→

fZustand

−→

z

alt

fZustand

x

y

z

neu

f

Zustand

: α →

s

→ ( β,

s

)

(21)

Sei

τ β =

s

→ ( β,

s

)

der Typ aller

zustandsabhängigen Berehnungen,die ein Ergebnis

von Typ

β

liefern.

(22)

von Typ

β

liefern.

(23)

Sei

τ β =

s

→ ( β,

s

)

der Typ aller

zustandsabhängigen Berehnungen,die ein Ergebnis

von Typ

β

liefern.

Man kann sih nun Getter und Setter denieren:

get

:

s

→ (

s

,

s

) = τ

s

(24)

von Typ

β

liefern.

Man kann sih nun Getter und Setter denieren:

get

:

s

→ (

s

,

s

) = τ

s get

= λ

z

→ (

z

,

z

)

(25)

Sei

τ β =

s

→ ( β,

s

)

der Typ aller

zustandsabhängigen Berehnungen,die ein Ergebnis

von Typ

β

liefern.

Man kann sih nun Getter und Setter denieren:

get

:

s

→ (

s

,

s

) = τ

s get

= λ

z

→ (

z

,

z

)

set

:

s

s

→ (() ,

s

) =

s

→ τ ()

(26)

von Typ

β

liefern.

Man kann sih nun Getter und Setter denieren:

get

:

s

→ (

s

,

s

) = τ

s get

= λ

z

→ (

z

,

z

)

set

:

s

s

→ (() ,

s

) =

s

→ τ ()

setz

= λ

_

→ (() ,

z

)

(27)

τ β =

s

→ ( β,

s

)

(28)
(29)

τ β =

s

→ ( β,

s

)

Werte in eine Zustandsberehnung hineinbringen:

return

: α → τ α

(30)

Werte in eine Zustandsberehnung hineinbringen:

return

: α → τ α

returnx

= λ

z

→ (

x

,

z

)

(31)

τ β =

s

→ ( β,

s

)

Werte in eine Zustandsberehnung hineinbringen:

return

: α → τ α

returnx

= λ

z

→ (

x

,

z

)

Zwei Zustandsberehnungen hintereinander

(32)

Werte in eine Zustandsberehnung hineinbringen:

return

: α → τ α

returnx

= λ

z

→ (

x

,

z

)

Zwei Zustandsberehnungen hintereinander

(33)

τ β =

s

→ ( β,

s

)

Werte in eine Zustandsberehnung hineinbringen:

return

: α → τ α

returnx

= λ

z

→ (

x

,

z

)

Zwei Zustandsberehnungen hintereinander

ausführen:

bind

: τ α → ( α → τ

b

eta

) → τ

b eta

(34)

Werte in eine Zustandsberehnung hineinbringen:

return

: α → τ α

returnx

= λ

z

→ (

x

,

z

)

Zwei Zustandsberehnungen hintereinander

ausführen:

bind

: τ α → ( α → τ

b

eta

) → τ

b eta

f bindg

= λ

z

let

(

x

,

z

) =

f z in g x z

Referenzen

ÄHNLICHE DOKUMENTE

Wenn diese Bedingung aber erfüllt ist gibt es für ein Gelenkmodell gleich unendlich viele Positionen mit einem Inkreis. Die Abbildung 26 zeigt exemplarisch zwei

Abgabe bis Do, 30.10., 12 Uhr Aufgabe 1 zur Bearbeitung in der ¨ Ubung Aufgaben 2-4 zur selbst¨ andigen Bearbeitung. Im Folgenden sei K stets ein angeordneter

Die Bedeutung der logischen Zeichen soll durch die folgende Beweisin-

wird, welcher nur ca. Beim LEED werden die Elektronen frontal auf eine Probe geschossen, jedoch mit einer viel geringeren. Energie, so, dass diese reektiert werden, wobei die

[r]

Für die Durchführung der Prüfmethode muss der Lichtkegel des künstlichen Sternes so ausgerichtet werden, dass der Spiegel voll ausgeleuchtet ist und der Bildpunkt sich dicht neben

• In general, precise values of variables will be unknown — perhaps, however, a tight

De finitions ge m ¨aß ig ve rt eil t... Gru