Ich simuliere einen Evaluator mit Haskell. Es sollte einfach sein, aber ich konnte nicht debuggen.Einen Evaluator simulieren
Here I State
als Look-up-Funktion definieren (String -> Int
), einem Anfangszustand (empty
, Ausnahmevariable auswertet 0
) und extend
zu neuen Schlüssel hinzuzufügen (und es ist Wert) zu einer base
Umgebung:
type State = String -> Int
extend :: State -> String -> Int -> State
extend base key val = \x -> if key == x
then val
else base key
empty :: State
empty = \x -> 0
, wenn ich das Programm testen:
aState = extend empty "A" 5
bState = extend aState "B" 4
cState = extend bState "C" 3
ich nehme an, dass cState
auf eine Funktion gleichwertig sein soll:
\x -> if x == "C"
then 3
else if x == "B"
then 4
else if x == "A"
then 5
else 0
Aber stattdessen ich cState "B" == 0
und cState "A" == 0
.
Ich kann nicht sehen, was mit extend
falsch ist, könnte mir jemand erklären?