Packages

An Elixir library for parsing and evaluating mathematical expressions

Current section

Files

Jump to
expr lib expr.ex
Raw

lib/expr.ex

defmodule Expr do
import Expr.Stack
import Expr.Ops
def eval!(expr) do
expr
|> Expr.Parser.expressionify
|> calculate
end
def eval!(expr, vars) do
expr
|> Expr.Parser.expressionify(vars)
|> calculate
end
def calculate(rpn), do: calculate(rpn, [])
def calculate([], stk), do: stk
def calculate(rpn, stk) do
{top, stack} = pop(rpn)
cond do
is_number(top) -> calculate(stack, push(stk, top))
true ->
func = oprs[top].f
cond do
is_function(func, 2) ->
{{o, _}, {ox, st}} = {pop(stk), elem(pop(stk), 1) |> pop}
calculate(stack, push(st, func.(ox, o)))
is_function(func, 1) ->
{o, st} = pop(stk)
calculate(stack, push(st, func.(o)))
end
end
end
end