Хотя с ответом @ Dogbert это работает, весь код очень противоречит идиоматике.В эликсире мы в основном используем сопоставление вместо спагетти if
с.Всегда лучше обрабатывать угловые случаи явно:
defmodule Complex do
def complex_to_string(r, i)
when not is_number(r) or not is_number(i),
do: raise "Unexpected input"
# added for clarity, (r, 0) covers the case
def complex_to_string(0, 0), do: "0"
def complex_to_string(r, 0), do: "#{r}"
def complex_to_string(0, i), do: "#{i}i"
def complex_to_string(r, i)
when i > 0, do: "#{r}+#{i}i"
# guard below is redundant, added for clarity
def complex_to_string(r, i)
when i < 0, do: "#{r}#{i}i"
end
[{-1,5},{2,0},{0,-2},{0,0},{-3,-3}]
|> Enum.map(fn {r, i} ->
Complex.complex_to_string(r, i)
end)
#⇒ ["-1+5i", "2", "-2i", "0", "-3-3i"]