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

时间:2017-02-06 21:12:46

标签: elixir

运行时

1..10000000000000000000 |> Enum.sum

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

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

1 个答案:

答案 0 :(得分:14)

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

def sum(first..last) when last > first do
  div((last + first) * (last - first + 1), 2)
end

Source