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

Par*_*ife 8 lisp common-lisp

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

(with-output-to-string (str)
    (let ((*standard-output* str))
        (time (test-with-size 40))))
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 是一种捕获输出的方法time
  2. 如果没有,我可以捕获slime-profile-report命令的输出吗?
  3. 如果以上都不起作用,我如何衡量评估任意表达式所花费的时间?

我想要实现的是测量算法的运行时间,因为输入的大小增加,因此对于每个输入大小(范围从1到100),我将测量很多次并保持平均值.然后我想绘制结果.绘图很简单,我在Cliki中找到了很多方法,但我如何收集结果呢?

我正在使用CLISP和CCL.

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

Rai*_*wig 10

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

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

(with-output-to-string (*trace-output*)
  (time (sin 40.0)))
Run Code Online (Sandbox Code Playgroud)

您也可以使用时间原语编写自己的宏.请参见25.1.4.3内部时间以获取数字数据.