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.

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top