Question

Je veux voir combien de temps une fonction prend pour s'exécuter. Quelle est la façon la plus simple de faire cela dans PLT-Scheme? Idéalement, j'aimerais pouvoir faire quelque chose comme ceci:

> (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
> 

Cela n'a pas d'importance si je devrais utiliser une autre syntaxe telle que (timy loopy 5000000) ou (timed '(loopy 5000000)) , ou si il renvoie le temps pris dans un contre ou quelque chose.

Était-ce utile?

La solution

Le nom standard pour chronométrer l'exécution des expressions dans la plupart des implémentations de Scheme est "time". Voici un exemple de DrRacket.

  

(définir (temps bouclés)       (si (zéro? fois)           0           (loopy (sub1 fois))))

     

(heure (boucle 5000000))   temps cpu: 1526 temps réel: 1657 gc temps: 0   0

Si vous utilisez le temps nécessaire pour comparer différentes implémentations, N'oubliez pas d'utiliser une raquette à partir de la ligne de commande plutôt que d'évaluer directement dans DrRacket (DrRacket insère du code de débogage afin de donner de meilleurs messages d'erreur).

Autres conseils

Je l'ai trouvé ...

Extrait du en ligne documentation :

  
      
  • (liste d'arguments de processus d'application de temps) appelle la procédure proc avec les arguments de la liste d'arguments. Quatre valeurs sont renvoyées: une liste contenant le (s) résultat (s) de l'application de proc, le nombre de millisecondes de temps CPU requis pour obtenir ce résultat, le nombre de «vraies» millisecondes requises pour le résultat et le nombre de millisecondes de Temps CPU (inclus dans le premier résultat) consacré à la récupération de place.
  •   

Exemple d'utilisation:

> (time-apply loopy '(5000000))
(0)
621
887
0
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top