Вы можете использовать Guard по-другому (наряду с функцией is_integer
), и, наконец, erlang будет выдавать новое исключение всякий раз, когда в функцию передается неверный аргумент, и вы можете позволить другому процессу выполнить восстановление после ошибки.
countdown(0) ->
io:format("Zero ~n");
countdown(N) when N > 0 and is_integer(N) ->
io:format("~p ~n", [N]),
countdown(N-1);
countdown(N) when is_integer(N) ->
io:format("negative number ~n").