在Racket中总结非常大的数字

时间:2013-03-24 10:39:47

标签: lisp racket

所以我希望总结零到一亿之间的数字。这段代码非常适合千万,在我的机器上执行大约3秒钟。然而,一旦我尝试总计达到一亿,它就会冻结我的计算机并且永远不会完成。我已等待这段代码完成五分钟,但仍然无法完成。

#lang racket/base

(require (only-in racket/list range))

(let ([theList (range 0 100000000)]) (time (apply + theList)))

2 个答案:

答案 0 :(得分:6)

您可以使用for/sum

(for/sum ([i (in-range 100000000)])
  i)

与所有for/xxx版本一样,for/sum基本上是以for/fold(Chris Jester-Young解释)的形式实现的。换句话说,for/sumfor/fold附近的便利包装。

答案 1 :(得分:4)

据我所知,在Racket中对数字求和的标准方法是使用for/fold而不是apply,如果你的范围很大:

(for/fold ((n 0))
          ((i (in-range 100000000)))
  (+ n i))

这需要半秒钟才能在我的电脑上运行。