我在浏览 elixir 文档时发现了这段代码:
List.foldl([1, 2, 3, 4], 0, fn(x, acc) -> x - acc end) # 2
我尝试了一段时间来了解它在做什么,但我一直不明白为什么会返回 2?如果有人能花时间向我解释这一点,我将不胜感激。
我完全理解第二个 arg 是一个累加器。如果将其设置为 0,这不应该返回 10 吗?
最佳答案
累加器的初始值为 0
,您正在为列表中的每个 x 执行 x - acc
。评估如下:
x - acc = new_acc
-----------------
1 - 0 = 1
2 - 1 = 1
3 - 1 = 2
4 - 2 = 2
如果您想从初始累加器中减去每个 x
,您可能打算执行 acc - x
:
iex(1)> List.foldl([1, 2, 3, 4], 0, fn(x, acc) -> acc - x end)
-10
这是我用来打印步骤的代码:
iex(1)> List.foldl([1, 2, 3, 4], 0, fn(x, acc) -> IO.puts "#{x} - #{acc} = #{x - acc}"; x - acc end)
1 - 0 = 1
2 - 1 = 1
3 - 1 = 2
4 - 2 = 2
2
关于elixir - 理解 Elixir 中的折叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44661547/