【发布时间】:2017-02-07 05:15:30
【问题描述】:
运行时
1..10000000000000000000 |> Enum.sum
结果是在看似恒定的时间内计算出来的 - 我假设它使用公式 1+ 2+ ... + n = n(n+1) / 2
是什么让 elixir 进行这种优化? 1..n 表示法与将普通列表声明为[1,2,3] 不同。当我检查1..100000 时,它似乎返回了一个字符串。这是怎么回事?
【问题讨论】:
标签: elixir
运行时
1..10000000000000000000 |> Enum.sum
结果是在看似恒定的时间内计算出来的 - 我假设它使用公式 1+ 2+ ... + n = n(n+1) / 2
是什么让 elixir 进行这种优化? 1..n 表示法与将普通列表声明为[1,2,3] 不同。当我检查1..100000 时,它似乎返回了一个字符串。这是怎么回事?
【问题讨论】:
标签: elixir
1..10000000000000000000 是一个Range,Elixir 在Enum.sum 中有一个特殊情况,用于使用整数求和公式的范围:
def sum(first..last) when last > first do
div((last + first) * (last - first + 1), 2)
end
【讨论】: