aboutsummaryrefslogtreecommitdiff
path: root/lib/elixir_math_parser.ex
diff options
context:
space:
mode:
authorWilliam Hergès <william@herges.fr>2025-11-08 22:14:56 +0100
committerWilliam Hergès <william@herges.fr>2025-11-08 22:14:56 +0100
commitf52f066e7cf6b4c96e452a8f7e803d7f1895e9a1 (patch)
tree30e928aa1bfa526a6fea6d68b90021f8d1971d0b /lib/elixir_math_parser.ex
parentaa1d984db18333d89b6bb2b1fa9852f85edba2de (diff)
feat(error): better result when error
Diffstat (limited to 'lib/elixir_math_parser.ex')
-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