所以我希望总结零到一亿之间的数字。这段代码运行得非常好,一千万,在我的机器上执行大约 3 秒。但是,当我试图总结一亿时,它就冻结了我的计算机,并且永远无法完成。我已经等待此代码完成五分钟,但它仍然无法完成。
#lang racket/base
(require (only-in racket/list range))
(let ([theList (range 0 100000000)]) (time (apply + theList)))
您可以使用for/sum
:
(for/sum ([i (in-range 100000000)])
i)
像所有的for/xxx
变体一样,for/sum
本质上是根据for/fold
(Chris Jester-Young 解释的)实现的。换句话说for/sum
,它是一个方便的包装器for/fold
。
据我所知,在 Racket 中求和数字的标准方法是使用for/fold
而不是apply
,如果您的范围很大:
(for/fold ((n 0))
((i (in-range 100000000)))
(+ n i))
这需要半秒钟才能在我的计算机上运行。