【发布时间】:2014-03-06 15:38:40
【问题描述】:
我正在用 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]) 是如何工作的?它与任何定义都不匹配。 函数还是尾递归吗?
【问题讨论】:
-
我想知道这是否是尾递归或不是我自己。我认为它可能是,因为您没有坚持任何应该强制代码创建堆栈框架的东西。
-
它是尾递归的。我已经更新了回复。
标签: recursion pattern-matching default tail-recursion elixir