首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通用Lisp宏,用于计算调用中窗体的执行时间

通用Lisp宏,用于计算调用中窗体的执行时间
EN

Stack Overflow用户
提问于 2018-06-16 02:51:02
回答 1查看 71关注 0票数 3

我目前需要写一些类似于user::time的东西,但需要修改一下。

修改如下。假设我的新宏名为time-lisp-forms。那么我应该可以像这样使用它。

代码语言:javascript
复制
(defun test (a b)
  (let ((c (+a b)))
    (time (+ c a))
    (time (+ c b)))))

我这样调用这个宏:

代码语言:javascript
复制
(time-lisp-forms (test 1 2))

然后,它的输出将如下所示:

代码语言:javascript
复制
Total time for (test 1 2) = 5 sec
Time block 1: (+ c a) = 1 sec
Time block 2: (+ c b) = 3 sec

也就是说,我希望对函数的外部调用计时,同时能够指示其中我想要特别关注的块。

问题是,这样的东西是否已经存在。另外,如果我需要实现这一点,你能推荐从哪里开始吗,或者一些有用的函数/宏。不一定要寻找有效的解决方案,但欢迎指导和指导:)

EN

回答 1

Stack Overflow用户

发布于 2018-06-16 03:01:41

代码语言:javascript
复制
(time-lisp-forms (test 1 2))

可以扩展为:

代码语言:javascript
复制
(let ((*counter* (make-counter :forms '((test 1 2)))))
  (test 1 2)
  (print-summary *counter*))

(或者作为对执行相同操作的函数的调用进行扩展)。

您可以将*counter*变量动态绑定到counter类的实例。

您的自定义(time expr)表达式将扩展为:

代码语言:javascript
复制
`(call-time-block *counter* ',expr (lambda () ,expr))

然后,该函数将给出一个新的id (1、2等)。测试,并使用GET-INTERNAL-RUN-TIME获得的内部前后计数器测量时间。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50881239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档