aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/elixir_math_parser.ex35
1 files changed, 20 insertions, 15 deletions
diff --git a/lib/elixir_math_parser.ex b/lib/elixir_math_parser.ex
index 91f67f9..8d5bcc9 100644
--- a/lib/elixir_math_parser.ex
+++ b/lib/elixir_math_parser.ex
@@ -16,36 +16,41 @@ defmodule ElixirMathParser do
end
defp reduce_to_value({:add_op, lhs, rhs}, state) do
- {:ok, op1} = reduce_to_value(lhs, state)
- {:ok, op2} = reduce_to_value(rhs, state)
- {:ok, op1 + op2}
+ with {:ok, op1} <- reduce_to_value(lhs, state),
+ {:ok, op2} <- reduce_to_value(rhs, state) do
+ {:ok, op1 + op2}
+ end
end
defp reduce_to_value({:sub_op, lhs, rhs}, state) do
- {:ok, op1} = reduce_to_value(lhs, state)
- {:ok, op2} = reduce_to_value(rhs, state)
- {:ok, op1 - op2}
+ with {:ok, op1} <- reduce_to_value(lhs, state),
+ {:ok, op2} <- reduce_to_value(rhs, state) do
+ {:ok, op1 - op2}
+ end
end
defp reduce_to_value({:mul_op, lhs, rhs}, state) do
- {:ok, op1} = reduce_to_value(lhs, state)
- {:ok, op2} = reduce_to_value(rhs, state)
- {:ok, op1 / op2}
+ with {:ok, op1} <- reduce_to_value(lhs, state),
+ {:ok, op2} <- reduce_to_value(rhs, state) do
+ {:ok, op1 * op2}
+ end
end
defp reduce_to_value({:div_op, lhs, rhs}, state) do
- {:ok, op1} = reduce_to_value(lhs, state)
- {:ok, op2} = reduce_to_value(rhs, state)
- {:ok, op1 / op2}
+ with {:ok, op1} <- reduce_to_value(lhs, state),
+ {:ok, op2} <- reduce_to_value(rhs, state) do
+ {:ok, op1 / op2}
+ end
end
defp evaluate_tree([{:assign, {:atom, _line, lhs}, rhs} | tail], state) do
- {:ok, rhs_value} = reduce_to_value(rhs, state)
- evaluate_tree(tail, Map.merge(state, %{lhs => rhs_value}))
+ with {:ok, val} <- reduce_to_value(rhs, state) do
+ evaluate_tree(tail, Map.merge(state, %{lhs => val}))
+ end
end
defp evaluate_tree([], state) do
- state
+ {:ok, state}
end
def process_tree(tree) do