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

Я хочу узнать, сколько времени требуется для выполнения функции. Какой самый простой способ сделать это в 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) или (timed '(loopy 5000000)), или он возвращает время, затраченное на минусы, или что-то в этом роде.

Работа с датами и временем в языке Java
Работа с датами и временем в языке Java
Работа с датами и временем в языке Java была сильно переработана начиная с версии Java 8 и далее с появлением библиотеки java.time.
2
0
1 222
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Нашел ...

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

  • (time-apply proc arg-list) invokes the procedure proc with the arguments in arg-list. Four values are returned: a list containing the result(s) of applying proc, the number of milliseconds of CPU time required to obtain this result, the number of ``real'' milliseconds required for the result, and the number of milliseconds of CPU time (included in the first result) spent on garbage collection.

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

> (time-apply loopy '(5000000))
(0)
621
887
0
Ответ принят как подходящий

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

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

(time (loopy 5000000)) cpu time: 1526 real time: 1657 gc time: 0 0

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

Из-за смены имени DrScheme заменен на DrRacket.

soegaard 21.04.2012 18:55

Другие вопросы по теме