13.07.2015 Aufrufe

Monaden

Monaden

Monaden

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Monaden</strong>Um eine Fehlerbehandlung zum monadischen Auswerter hinzuzufügen,ersetzen wir unit (a ÷ b) durch:if b = 0then raise "divide by zero"else unit (a ÷ b)Der Änderungsaufwand entspricht durchaus dem in einer unreinenSprache. Wiederum ist der Auswerter vollkommen gleichwertig zu dem inAbschnitt 1.1.2.2 Der monadische Auswerter mit globalem ZustandDie Zustands-Monade sieht folgendermassen aus:type M atype State= State → (a, State)= Intunit:: a → M aunit a = λx.(a, x)()m k:: M a → (a → M b) → M b= λx. let (a, y) = m x inlet (b, z) = k a y in(b, z)tick :: M ()tick = λx.((), x + 1)Der Aufruf unit a liefert die Berechnung zurück, die den alten Zustand xübernimmt und den Wert a und den neuen Zustand x zurückgibt, d.h. derZustand bleibt unverändert. Der Aufruf m k führt im alten Zustand x dieBerechnung m aus, welche den Wert a und den zwischenzeitigen Zustand yliefert, und führt dann die Berechnung k a in Zustand y aus, woraus dasEndergebnis b sowie der Endzustand z resultieren. Der Aufruf tick erhöhtden Zustandszähler und liefert den leeren Wert () zurück, dessen Typebenfalls als () geschrieben wird.Julian Mehnle 9

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!