在lisp中,我如何测量和捕获评估表达式所花费的时间?

时间:2011-02-16 18:49:46

标签: lisp common-lisp

我想捕获对time宏的调用结果,以便收集多个测量值并进行处理。我尝试在本地setf标准输出并将其重定向到字符串,但它不适用于time宏。也许这是错的,但我尝试的是:

(with-output-to-string (str)
    (let ((*standard-output* str))
        (time (test-with-size 40))))

问题:

  1. 是否可以捕获time的输出?
  2. 如果没有,我可以捕获slime-profile-report命令的输出吗?
  3. 如果以上都不起作用,我该如何衡量评估任意表达式所花费的时间?
  4. 我想要实现的是测量算法的运行时间,因为输入的大小增加,因此对于每个输入大小(范围从1到100),我将测量很多次并保持平均值。然后我想绘制结果。绘图很简单,我在Cliki中找到了很多方法,但我如何收集结果呢?

    我正在使用CLISP和CCL。

    编辑:Paul Nathan指出time宏输出到*trace-output*这是一个解决方案。我想要一个更好,更简单的解决方案,因为有了这个,我必须解析一个特定于实现的跟踪。

1 个答案:

答案 0 :(得分:9)

如果要捕获文本,则需要使用正确的流。 ANSI CL标准说TIME打印到跟踪输出。

所以这会给你一个字符串的文字。

(with-output-to-string (*trace-output*)
  (time (sin 40.0)))

您也可以使用时间原语编写自己的宏。请参阅25.1.4.3 Internal Time以获取数字数据。