Хотя ответ Адама совершенно верен, для вычисления среднего вы могли бы добиться большего успеха (за один л oop,), используя более сложный аккумулятор.
defmodule M do
def avg(list), do: do_avg({0, 0}, list)
defp do_avg({cnt, sum}, []),
do: sum / cnt
defp do_avg({cnt, sum}, [h | t]),
do: do_avg({cnt + 1, sum + h}, t)
end
M.avg [1,2,3,4]
#⇒ 2.5
Здесь мы накапливаем и счет и общее количество и вычисляем среднее значение на последнем шаге, когда список исчерпан.
Кроме того, вы можете вернуть все, как кортеж {cnt, sum, sum / cnt}
или как карта для лучшей читаемости.