2

所以我希望总结零到一亿之间的数字。这段代码运行得非常好,一千万,在我的机器上执行大约 3 秒。但是,当我试图总结一亿时,它就冻结了我的计算机,并且永远无法完成。我已经等待此代码完成五分钟,但它仍然无法完成。

#lang racket/base

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

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

2 回答 2

6

您可以使用for/sum

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

像所有的for/xxx变体一样,for/sum本质上是根据for/fold(Chris Jester-Young 解释的)实现的。换句话说for/sum,它是一个方便的包装器for/fold

于 2013-03-24T12:39:03.313 回答
4

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

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

这需要半秒钟才能在我的计算机上运行。

于 2013-03-24T12:07:11.957 回答