-
-
Save petros/0154390a5bd57a27c963371a36cbc02b to your computer and use it in GitHub Desktop.
Stack Underflow - Elixir - Exercism
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule RPNCalculator.Exception do | |
defmodule DivisionByZeroError do | |
defexception message: "division by zero occurred" | |
end | |
defmodule StackUnderflowError do | |
defexception message: "stack underflow occurred" | |
@impl true | |
def exception(value) do | |
case value do | |
[] -> | |
%StackUnderflowError{} | |
_ -> | |
%StackUnderflowError{message: "stack underflow occurred, context: " <> value} | |
end | |
end | |
end | |
def divide(stack) when length(stack) < 2, do: raise(StackUnderflowError, "when dividing") | |
def divide([0, _nominator] = _stack), do: raise(DivisionByZeroError) | |
def divide([divisor, nominator]) when divisor != 0, do: nominator / divisor | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment