我正在用 Elixir 写一个简单的例子,虽然它有效,但我不太明白如何。
defmodule MyList do
def sum([],acc \\ 0), do: acc
def sum([head | tail], acc), do: sum(tail,acc + head)
end
当我调用 MyList.sum 时,我得到了预期的结果
sum([]) => 0
sum([1,2,3]) => 6
我无法在第二个总和中添加默认参数,因为编译器会抛出错误
def sum/2 has default values and multiple clauses, use a separate clause for declaring defaults
所以我的问题是, sum([1,2,3]) 是如何工作的?它与任何定义都不匹配。函数仍然是尾递归的吗?