运行时
1..10000000000000000000 |> Enum.sum
结果以似乎恒定的时间计算 - 我假设它使用公式1+ 2+ ... + n = n(n+1) / 2
什么允许elixir进行此优化?是1..n表示法不同于将正常列表声明为[1,2,3]
。当我检查1..100000
时,它似乎返回一个字符串。这里发生了什么?
答案 0 :(得分:14)
1..10000000000000000000
是Range
,Elixir在Enum.sum
中有一个特殊情况,用于使用整数求和公式的范围:
def sum(first..last) when last > first do
div((last + first) * (last - first + 1), 2)
end