Skip to content

Instantly share code, notes, and snippets.

@copy
Created December 6, 2014 15:36
Show Gist options
  • Save copy/e7673a4280c6b24d4f42 to your computer and use it in GitHub Desktop.
Save copy/e7673a4280c6b24d4f42 to your computer and use it in GitHub Desktop.
evaluate(Expr) ->
eval(string:tokens(Expr, " ")).
eval(X) ->
lists:foldl(fun eval_single/2, [], X).
eval_single("+", [X, Y|Stack]) -> [X + Y|Stack];
eval_single("-", [X, Y|Stack]) -> [X - Y|Stack];
eval_single("*", [X, Y|Stack]) -> [X * Y|Stack];
eval_single("/", [X, Y|Stack]) -> [X div Y|Stack];
eval_single("%", [X, Y|Stack]) -> [X rem Y|Stack];
eval_single("neg", [X|Stack]) -> [-X|Stack];
eval_single("^", [X, Y|Stack]) -> [trunc(math:pow(X,Y))|Stack];
eval_single(X, Stack) -> [list_to_integer(X)|Stack].
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment