在Scheme中是否有等价于Lisp的"运行时"原语?

Bil*_*ard 23 lisp scheme sicp racket

根据SICP第1.2.6节,练习1.22:

大多数Lisp实现包括一个名为runtime的原语,它返回一个整数,指定系统运行的时间(例如,以微秒为单位测量).

我正在使用DrScheme,运行时似乎不可用,所以我正在寻找一个好的替代品.我在PLT-Scheme Reference中发现有一个current-milliseconds原语.有谁知道Scheme中的计时器是否具有更好的分辨率?

Eli*_*lay 22

current-milliseconds是一个从系统返回当前毫秒计数的函数,但它可能会减少. current-inexact-milliseconds类似,但返回保证增加的浮点数.

您可以在该页面上找到许多类似的函数,但如果只需要对某个函数计时,那么只需使用(expr)它将打印出评估表达式所花费的时间.time

此处另一个相关的是分析器,以防您需要对代码进行更详细的分析.

  • 那是错的.首先,SICP与PLT之间没有直接关系.其次,毫秒计数器来自操作系统,并且由于中断处理程序在几毫秒的水平上处理,因此更精细的计数器没有意义.粒度通常为~20ms,甚至不是1ms.如果你有一些语言,例如,纳秒计数器,你将得不到任何更好的结果.第三,在msec级别测量运行时是一个坏主意,您需要重复评估足够的次数以获得实质性计数,否则运行时将在噪声中丢失. (4认同)

pat*_*fox 6

我今天也遇到了这个问题。我正在使用 DrRacket,因为它似乎已经取代了 DrScheme。虽然这是一个旧线程,但我会为任何偶然发现此线程的新人添加我的发现。

以 R5RS ( #lang r5rs) 为选择语言,在程序前添加以下两行使其工作

(#%require (only racket/base current-milliseconds))
(define (runtime) (current-milliseconds))
Run Code Online (Sandbox Code Playgroud)