我想捕获对time
宏的调用结果,以便收集多个测量值并进行处理。我尝试在本地setf
标准输出并将其重定向到字符串,但它不适用于time
宏。也许这是错的,但我尝试的是:
(with-output-to-string (str)
(let ((*standard-output* str))
(time (test-with-size 40))))
问题:
time
的输出?slime-profile-report
命令的输出吗?我想要实现的是测量算法的运行时间,因为输入的大小增加,因此对于每个输入大小(范围从1到100),我将测量很多次并保持平均值。然后我想绘制结果。绘图很简单,我在Cliki中找到了很多方法,但我如何收集结果呢?
我正在使用CLISP和CCL。
编辑:Paul Nathan指出time
宏输出到*trace-output*
这是一个解决方案。我想要一个更好,更简单的解决方案,因为有了这个,我必须解析一个特定于实现的跟踪。
答案 0 :(得分:9)
如果要捕获文本,则需要使用正确的流。 ANSI CL标准说TIME打印到跟踪输出。
所以这会给你一个字符串的文字。
(with-output-to-string (*trace-output*)
(time (sin 40.0)))
您也可以使用时间原语编写自己的宏。请参阅25.1.4.3 Internal Time以获取数字数据。