【问题标题】:Time Code in PLT-SchemePLT 方案中的时间码
【发布时间】:2008-11-02 08:01:35
【问题描述】:

我想看看一个函数需要多长时间才能运行。在 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))),或者它是否返回所花费的时间,都没有关系。

【问题讨论】:

    标签: time scheme timing racket


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 由于名称更改,将 DrScheme 更改为 DrRacket。
    【解决方案2】:

    找到了……

    来自online documentation

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

    示例用法:

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

    【讨论】:

      猜你喜欢
      • 2010-11-02
      • 2010-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多