所以我希望总结零到一亿之间的数字。这段代码非常适合千万,在我的机器上执行大约3秒钟。然而,一旦我尝试总计达到一亿,它就会冻结我的计算机并且永远不会完成。我已等待这段代码完成五分钟,但仍然无法完成。
#lang racket/base
(require (only-in racket/list range))
(let ([theList (range 0 100000000)]) (time (apply + theList)))
答案 0 :(得分:6)
您可以使用for/sum
:
(for/sum ([i (in-range 100000000)])
i)
与所有for/xxx
版本一样,for/sum
基本上是以for/fold
(Chris Jester-Young解释)的形式实现的。换句话说,for/sum
是for/fold
附近的便利包装。
答案 1 :(得分:4)
据我所知,在Racket中对数字求和的标准方法是使用for/fold
而不是apply
,如果你的范围很大:
(for/fold ((n 0))
((i (in-range 100000000)))
(+ n i))
这需要半秒钟才能在我的电脑上运行。