diff options
| author | William Hergès <william@herges.fr> | 2025-11-08 22:14:56 +0100 |
|---|---|---|
| committer | William Hergès <william@herges.fr> | 2025-11-08 22:14:56 +0100 |
| commit | f52f066e7cf6b4c96e452a8f7e803d7f1895e9a1 (patch) | |
| tree | 30e928aa1bfa526a6fea6d68b90021f8d1971d0b /lib/elixir_math_parser.ex | |
| parent | aa1d984db18333d89b6bb2b1fa9852f85edba2de (diff) | |
feat(error): better result when error
Diffstat (limited to 'lib/elixir_math_parser.ex')
| -rw-r--r-- | lib/elixir_math_parser.ex | 35 |
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 |
