Elixir
  • My Elixir journey
  • Why functional programming?
  • Exhort
    • 🗓️Day 22
    • 🗓️Day 21
    • 🗓️Day 20
    • 🗓️Day 19
    • 🗓️Day 18
    • 🗓️Day 17
    • 🗓️Day 16
    • 🗓️Day 15
    • 🗓️Day 14
  • Bits and pieces
    • Clean mix dependencies
    • Run tests automatically on save
    • Run tests and stop on first failure
    • How to remove Tailwind from a Phoenix project
Powered by GitBook
On this page
  • Exercises
  • Stack Underflow
  • Overall progress
  1. Exhort

Day 22

Monday, 29 August 2022 - Day 22 of Exhort August 2022 - Exercism (My Elixir Journey)

PreviousExhortNextDay 21

Last updated 2 years ago

Exercises

Stack Underflow

|

Solution

Expand to see code (spoiler alert)
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

Notes

Overall progress

🗓️
Exercise on Exercism
View my solution
View gist on GitHub
Stack Underflow
Progress
An image showing my progress on Exercism. It's 23.1% as of Monday, 29 August 2022.