Time Code in PLT-Scheme
Frage
Ich möchte sehen, wie lange eine Funktion auszuführen dauert. Was ist der einfachste Weg, dies in PLT-Scheme zu tun? Im Idealfall würde ich so etwas wie dies zu tun in der Lage sein will:
> (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
>
Es spielt keine Rolle, ob ich eine andere Syntax wie (timed loopy 5000000)
oder (timed '(loopy 5000000))
zu müss verwenden, oder wenn es die Zeit in einem cons oder etwas genommen zurück.
Lösung
Die Standardnamen, um die Ausführung von Ausdrücken in den meisten Schema-Implementierungen für das Timing ist „Zeit“. Hier ist ein Beispiel aus DrRacket.
(define (loopy mal) (If (null? Mal) 0 (Loopy (sub1 mal))))
(Zeit (loopy 5000000)) CPU-Zeit: 1526 Echtzeit: 1657 gc Zeit: 0 0
Wenn Sie Zeit zum Benchmark verschiedener Implementierungen gegeneinander verwenden, erinnern Schläger von der Kommandozeile zu verwenden, anstatt direkt Benchmarking in DrRacket (DrRacket fügt Debug-Code, um einen besseren Fehlermeldungen zu geben).
Andere Tipps
Found it ...
Von der Online Dokumentation :
(time-apply proc arg-list)
ruft die Prozedur proc mit den Argumenten in arg-Liste. Vier Werte werden zurückgegeben: eine Liste mit dem Ergebnis (se) von proc Anwendung, die Anzahl der Millisekunden der CPU-Zeit erforderlich, um dieses Ergebnis zu erhalten, die Zahl der `` realer ‚‘ Millisekunden für das Ergebnis erforderlich, und die Anzahl der Millisekunden CPU-Zeit (in der ersten Folge enthalten) ausgegeben Garbage collection.
Beispiel Nutzung:
> (time-apply loopy '(5000000))
(0)
621
887
0