2

関数の実行にかかる時間を知りたい。PLT-Scheme でこれを行う最も簡単な方法は何ですか? 理想的には、次のようなことができるようになりたいと思います。

> (define (loopy times)
  (if (zero? times)
      0
      (loopy (sub1 times)))) 
> (loopy 5000000)
0                      ;(after about a second)
> (timed (loopy 5000000))
Took: 0.93 seconds
0
> 

(timed loopy 5000000)or のような他の構文を使用する必要があるかどうか(timed '(loopy 5000000))、またはコンスなどにかかった時間を返すかどうかは問題ではありません。

4

2 に答える 2

5

ほとんどの Scheme 実装における式の実行のタイミングの標準的な名前は「時間」です。DrRacket 内の例を次に示します。

(define (loopy times) (if (zero? times) 0 (loopy (sub1 times))))

(時間 (ルーピー 5000000)) CPU 時間: 1526 リアルタイム: 1657 gc 時間: 0 0

時間をかけて異なる実装を相互にベンチマークする場合は、DrRacket で直接ベンチマークするのではなく、コマンド ラインからラケットを使用することを忘れないでください (DrRacket は、より適切なエラー メッセージを表示するためにデバッグ コードを挿入します)。

于 2008-11-04T18:49:15.623 に答える
3

それを見つけた...

オンライン ドキュメントから:

  • (time-apply proc arg-list)arg-list の引数を使用してプロシージャ proc を呼び出します。4 つの値が返されます: proc を適用した結果を含むリスト、この結果を取得するのに必要な CPU 時間のミリ秒数、結果に必要な「実際の」ミリ秒数、およびプロセスのミリ秒数です。ガベージ コレクションに費やされた CPU 時間 (最初の結果に含まれる)。

使用例:

> (time-apply loopy '(5000000))
(0)
621
887
0
于 2008-11-02T08:03:58.797 に答える