为什么Elixir的Enum.sum如此之快?

Sci*_*ter 4 elixir

跑步时

1..10000000000000000000 |> Enum.sum
Run Code Online (Sandbox Code Playgroud)

结果是在似乎恒定的时间内计算的 - 我假设它使用公式 1+ 2+ ... + n = n(n+1) / 2

什么允许elixir进行这种优化?是1..n表示法与声明正常列表不同[1,2,3].当我检查1..100000它似乎返回一个字符串.这里发生了什么?

Dog*_*ert 14

1..10000000000000000000是一个Range和Elixir有一个特殊情况Enum.sum的范围使用整数求和公式:

def sum(first..last) when last > first do
  div((last + first) * (last - first + 1), 2)
end
Run Code Online (Sandbox Code Playgroud)

资源

  • 模式匹配ftw :-) (2认同)