2

だから私は0から1億の間の数を合計しようとしています。このコードは1,000万回も非常にうまく機能し、私のマシンで約3秒で実行されます。しかし、合計で1億になるとすぐに、コンピューターがフリーズし、終了しなくなります。このコードが終了するのを5分間待ちましたが、それでも終了しません。

#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))

これは私のコンピューターで実行するのに0.5秒かかります。

于 2013-03-24T12:07:11.957 に答える