Lisp 收集“time”宏生成的时间和空间结果?

Lisp 收集“time”宏生成的时间和空间结果?,lisp,common-lisp,clisp,gnu-common-lisp,Lisp,Common Lisp,Clisp,Gnu Common Lisp,Common Lisp提供了一个time宏,用于找出表单执行所需的时间,并将信息打印到跟踪输出: 在当前环境中评估表单(词汇和动态)time打印各种定时数据和其他信息以跟踪输出。 打印信息的性质和格式如下: 实现定义。鼓励实现提供这样的服务 已用实时、机器运行时间和存储等信息 管理统计 例如: (time (length (make-array 1000000))) Real time: 0.0140014 sec. Run time: 0.0 sec. Sp

Common Lisp提供了一个
time
宏,用于找出表单执行所需的时间,并将信息打印到跟踪输出:

在当前环境中评估表单(词汇和动态)time打印各种定时数据和其他信息以跟踪输出。 打印信息的性质和格式如下: 实现定义。鼓励实现提供这样的服务 已用实时、机器运行时间和存储等信息 管理统计

例如:

(time (length (make-array 1000000)))
      Real time: 0.0140014 sec.
      Run time: 0.0 sec.
      Space: 4000008 Bytes
      GC: 1, GC time: 0.0 sec.
有没有一种方法可以收集这些参数,并将它们一步一步地推送到某个堆栈或列表中,然后从函数返回这些参数?

有些东西是标准的:并且:

其他不是(空间和GC计数),您需要找到

您也可以考虑使用-IT提供进度报告,包括ETA、


顺便说一句,在您的代码中,内存分配(
make array
)使
length
(数组的插槽访问)相形见绌。

我调用了一个函数来代替我的代码(如果我的方法正确的话),但它说“变量我的计时没有价值”。@Rorschach:您需要定义变量
*我的计时*
,例如
(defvar*my timings*)
@Rörd:我不知道为什么它对我仍然不起作用。您是否执行了
(defvar*my timings*nil)
?您的错误消息是什么?@sds:即使按照建议将其设置为零,我也会收到“SYSTEM::READ-EVAL-PRINT:variable my-timings没有值”。
(defvar *my-timings* nil)
(let ((run (get-internal-run-time))
      (real (get-internal-real-time)))
  (multiple-value-prog1 (my-code)
    (push (cons (- (get-internal-run-time) run)
                (- (get-internal-real-time) real))
          *my-timings*)))