我在Elixir中編寫了一個簡單的例子,雖然它起作用,但我並不十分了解。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
所以我不能在第二和添加默認PARAM我問題是,sum([1,2,3])是如何工作的?它不符合任何定義。 函數仍然是尾遞歸?
我想知道這是尾遞歸還是不是我自己。我認爲它可能會成爲現實,因爲你不會強迫任何應該強制代碼創建棧幀的東西。 –
它是尾遞歸的。我已經更新了回覆。 – sasajuric