но я хочу, чтобы это было похоже на тест: sum (4) выведет 1 + 2 ... + n
Вот рекурсивное решение:
-module(my).
-compile(export_all).
sum(0) ->
0;
sum(X) ->
X + sum(X-1).
В оболочке:
3> my:sum(1).
1
4> my:sum(2).
3
5> my:sum(3).
6
6> my:sum(4).
10
7> my:sum(5).
15
Обратите внимание, что если вы позвоните по номеру sum/1
с отрицательным номером, sum/1
будет повторяться вечно и в конечном итоге приведет к аварийному завершению оболочки, поэтому вы можете добавить охрану, который будет принимать только положительные числа. Затем, если вы позвоните по номеру sum/1
с отрицательным числом, вместо этого вы получите ошибку function_clause
, которую вы получите, когда: При оценке вызова функции не найдено соответствующее функциональное предложение. Конечно, вы можете также определите другое предложение функции, которое будет обрабатывать отрицательные числа.