Einleitung


... [ Inhaltsverzeichnis ] ... [ zurück ] ... [ weiter ] ...

Übersicht: Einleitung


Problem bei Funktionalen Programmiersprachen

Gegeben seien folgende Funktionen:

inputInt :: Int

inputDiff :: Int
inputDiff = inputInt - inputInt

Die Funktion inputInt liefert eine eingebene Zahl und die Funktion inputDiff die Differenz von zwei eingegeben Zahlen zurück.

Nun gibt es ein Problem bei funktionalen Programmiersprachen: die Auswertungsreihenfolge ist unbekannt. Werden nun zwei Zahlen in der Reihenfolge 7 und 3 eingegeben und die Funktion inputDiff von links ausgewertet, so ist das Ergebnis 3, von rechts ausgewertet ist das Ergebnis -3. Somit kann die Funktion inputDiff zwei verschiedene Ergebnisse zurückliefern und dies ist nicht erlaubt.

Zusätzlich kann der Compiler die Funktion auch optimieren. Da normalerweise Funktionen immer das gleiche Ergebnis zurückliefern, kann der Compiler die Rückgabe von inputDiff zu null reduzieren.

Um diese beiden Verhaltensweisen zu verhindern, wurde ein Konzept entwickelt: der Monad. Zunächst wird auf den IO Monad eingegangen, danach wird ein Evaluierer ohne Monad entwickelt und einige Features hinzugefügt. Danach wird der selbe Evaluierer mit Monaden erstellt.


... [ Inhaltsverzeichnis ] ... [ zurück ] ... [ weiter ] ... [ nach oben ] ...