elixir-book/strings/parse.exs

14 lines
457 B
Elixir

defmodule Parse do
def number([ ?- | tail]), do: _number_digits(tail, 0) * -1
def number([ ?+ | tail]), do: _number_digits(tail, 0)
def number(str), do: _number_digits(str, 0)
defp _number_digits([], value), do: value
defp _number_digits([digit | tail], value) when digit in '0123456789' do
_number_digits(tail, value * 10 + digit - ?0)
end
defp _number_digits([non_digit | _ ], _) do
raise "Invalid digit '#{[non_digit]}'"
end
end