Временной код в PLT-схеме - PullRequest
       30

Временной код в PLT-схеме

2 голосов
/ 02 ноября 2008

Я хочу посмотреть, сколько времени займет выполнение функции. Какой самый простой способ сделать это в PLT-схеме? В идеале я бы хотел иметь возможность сделать что-то вроде этого:

> (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) или (timed '(loopy 5000000)), или если он возвращает время, затраченное на минусы или что-то.

Ответы [ 2 ]

5 голосов
/ 04 ноября 2008

Стандартным именем для синхронизации выполнения выражений в большинстве реализаций Scheme является «время». Вот пример изнутри DrRacket.

(определить (цикличное время) (если (ноль? раз) 0 (зацикленное (sub1 раз))))

(время (циклично 5000000)) процессорное время: 1526 реальное время: 1657 gc время: 0 0

Если вы используете время для сравнения различных реализаций друг с другом, не забывайте использовать ракетку из командной строки, а не тестировать напрямую в DrRacket (DrRacket вставляет код отладки для улучшения сообщений об ошибках).

3 голосов
/ 02 ноября 2008

Нашли ...

Из онлайн-документации :

  • (time-apply proc arg-list) вызывает процедуру proc с аргументами в arg-list. Возвращаются четыре значения: список, содержащий результат (ы) применения proc, количество миллисекунд процессорного времени, необходимое для получения этого результата, количество «реальных» миллисекунд, необходимых для результата, и количество миллисекунд Время ЦП (включенное в первый результат), потраченное на сборку мусора.

Пример использования:

> (time-apply loopy '(5000000))
(0)
621
887
0
...