試圖瞭解Elixir如何執行Enum.reduce,我將它插入一個put來觀察輸出。我不清楚它爲什麼首先執行第二個列表元素,而不是第一個,然後獨立執行所有其他列表元素。Elixir減少元素的順序
iex (30)> Enum.reduce([1,2,3,4], &(IO.puts("a#{&1} b#{&2}")))
a2 b1
a3 bok
a4 bok
(A和B都只是爲了驗證順序)
查看源,我想它翻譯成
:lists.foldl(&IO.puts("a#{&1} b#{&2}"), 1, [2,3,4])
產生相同的結果。
其中1是最初的累加器,如果我給它一個函數來給它一些積累它的東西,會說出一些有趣的東西,而不是「bok」。
雖然反轉這些初始值讓我覺得很奇怪。我應該如何思考Reduce實施?
source reference https://github.com/elixir-lang/elixir/blob/master/lib/elixir/lib/enum.ex line 1475 –