2

我想看看一个函数需要多长时间才能运行。在 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)or (timed '(loopy 5000000)),或者它是否返回在 cons 或其他东西中花费的时间)都没有关系。

4

2 回答 2

5

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

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

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

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

于 2008-11-04T18:49:15.623 回答
3

找到了...

在线文档

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

示例用法:

> (time-apply loopy '(5000000))
(0)
621
887
0
于 2008-11-02T08:03:58.797 回答