我想看一个函数运行多长时间。在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))
之类的其他语法,或者如果它返回在缺点或其他内容中所花费的时间,则无关紧要。
答案 0 :(得分:5)
大多数Scheme实现中用于计时表达式执行的标准名称是“time”。以下是DrRacket中的一个示例。
(定义(循环次数) (如果(零?次) 0 (loopy(sub1次))))
(时间(loopy 5000000)) cpu时间:1526实时:1657 gc时间:0 0
如果您使用时间来对不同的实现进行基准测试, 记得从命令行使用racket而不是直接进行基准测试 在DrRacket中(DrRacket插入调试代码以提供更好的错误消息)。
答案 1 :(得分:3)
发现它......
(time-apply proc arg-list)
使用arg-list中的参数调用过程proc。返回四个值:一个列表,其中包含应用proc的结果,获得此结果所需的CPU时间的毫秒数,结果所需的“实际”毫秒数以及毫秒数花在垃圾收集上的CPU时间(包含在第一个结果中)。
使用示例:
> (time-apply loopy '(5000000))
(0)
621
887
0