List.foldr 或 List.foldl 与 Elixir 的理解

Bit*_*ise 2 elixir

我正在阅读 Elixir 文档,并且遇到了 Elixir List 模块的“foldr”函数。我真的很难理解它。这是医生所说的:

文档管理系统

Folds (reduces) the given list from the right with a function. Requires an accumulator.

iex> List.foldr([1, 2, 3, 4], 0, fn(x, acc) -> x - acc end)
-2
Run Code Online (Sandbox Code Playgroud)

所以这应该返回-2。但是当我读到它时,我似乎认为它每次都试图将一个数字减0,如果是这样的话我们如何得到-2?我显然不明白累加器,有人可以帮我分解它吗?

Dog*_*ert 6

了解此类函数如何工作的最简单方法是坚持IO.puts使用所有参数进行调用。

iex(1)> List.foldr([1, 2, 3, 4], 0, fn(x, acc) -> IO.puts "#{x} - #{acc} = #{x - acc}"; x - acc end)
4 - 0 = 4
3 - 4 = -1
2 - -1 = 3
1 - 3 = -2
-2
Run Code Online (Sandbox Code Playgroud)

因此,在第一次迭代中,x是 4 且acc是 0,我们得到x - acc = 4 - 0 = 4。最后我们得到了-2.