PLT方案中的时间码

时间:2008-11-02 08:01:35

标签: time scheme timing racket

我想看一个函数运行多长时间。在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))之类的其他语法,或者如果它返回在缺点或其他内容中所花费的时间,则无关紧要。

2 个答案:

答案 0 :(得分:5)

大多数Scheme实现中用于计时表达式执行的标准名称是“time”。以下是DrRacket中的一个示例。

  

(定义(循环次数)       (如果(零?次)           0           (loopy(sub1次))))

     

(时间(loopy 5000000))   cpu时间:1526实时:1657 gc时间:0   0

如果您使用时间来对不同的实现进行基准测试, 记得从命令行使用racket而不是直接进行基准测试 在DrRacket中(DrRacket插入调试代码以提供更好的错误消息)。

答案 1 :(得分:3)

发现它......

来自online documentation

  
      
  • (time-apply proc arg-list)使用arg-list中的参数调用过程proc。返回四个值:一个列表,其中包含应用proc的结果,获得此结果所需的CPU时间的毫秒数,结果所需的“实际”毫秒数以及毫秒数花在垃圾收集上的CPU时间(包含在第一个结果中)。
  •   

使用示例:

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