diff options
Diffstat (limited to '')
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | calc.erl | 30 |
2 files changed, 32 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5f61fbd --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.beam +folien.pdf diff --git a/calc.erl b/calc.erl new file mode 100644 index 0000000..4bf5967 --- /dev/null +++ b/calc.erl @@ -0,0 +1,30 @@ +-module(calc). +-export([eval/1]). + +eval(Formular) -> + eval(Formular,[]). + +eval([C | Formular], T) when integer(C) -> + eval(Formular, parseDigit(T, C)); + +eval([C | Formular], T) when C == "." -> + eval(Formular, parseDigit(T, C)); + +eval([C | Formular], T) when C == "+" -> + eval(Formular, [{plus, C}] ++ T); +eval([C |Formular], T) when C == "-" -> + eval(Formular, [{minus, C}] ++ T); +eval([C |Formular], T) when C == "*" -> + eval(Formular, [{mal, C}] ++ T); +eval([C |Formular], T) when C == "/" -> + eval(Formular, [{durch, C}] ++ T); + +eval([], P) -> + P. + +parseDigit([{digit, Last} | Tail], Current) when list(Last) -> + [{digit, Last ++ Current} | Tail]; +parseDigit([{digit, Last} | Tail], Current) -> + [{digit, [Last] ++ Current} | Tail]; +parseDigit(Tail, Current) -> + [{digit, Current} | Tail]. |