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>1.1 Der Auswerter mit ExceptionsIn unreinen Sprachen wird zur Fehlerbehandlung oft das Konzept vonExceptions (Ausnahmen) verwendet. Wird eine ungültige Situation erkannt, sowird sozusagen der "Ausnahmezustand" ausgerufen, auf dass dieumschliessende Fehlerbehandlung diesen abfangen und das Problembereinigen kann.Wollen wir nun eine Fehlerprüfung in unseren Auswerter einbauen, sokönnten wir z.B. eine neue Klasse von Funktionen einführen, bei derenBerechnung eine Exception auftreten kann:data M atype Exception= Raise Exception | Return a= StringDabei sind Raise und Return Konstruktoren, die entweder eine Fehlermeldungvom Typ String oder ein Ergebnis eines beliebigen Typs a zurückliefern.Jetzt können wir den Auswerter entsprechend umformen, um die Divisiondurch 0 abzufangen und eine Exception zu erzeugen:evaleval (Con a)eval (Div t u):: Term → M Int= Return a= case eval t ofRaise e → Raise eReturn a → case eval u ofRaise e → Raise eReturn b → if b = 0then Raise "divide by zero"else Return (a ÷ b)Falls bei der Berechnung des Divisors oder des Dividenden eine Exceptionauftritt, so wird diese erneut ausgerufen (mit dem selben Text), ansonsten wirdder Quotient aus beiden berechnet. Falls hierbei der Divisor 0 ist, so wirdebenfalls eine Exception erzeugt, andernfalls wird schliesslich das Ergebnis derDivision zurückgeliefert. Angewendet auf die beiden Beispiel-Terme liefert derAuswerter:eval answer = (Return 42)eval error = (Raise "divide by zero")Julian Mehnle 5

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!