3

使用常见的 lisp,我假设具有自省属性。如何将代码添加到常见的 lisp 代码中,以便告诉我何时调用函数以及何时完成执行。我想采用任何 lisp 代码和对代码的特殊修改。我用 lisp 的 AST 分析计算,这应该是可能的。

4

3 回答 3

6

您可以使用(trace function)一个简单的机制。对于更多涉及的内容,这是来自comp.lang.lisp的一个很好的讨论。

[CL_USER]>
(defun fac (n)
    "Naïve factorial implementation"
    (if (< 1 n)
        (* n (fac (- n 1)))
        1))
FAC
[CL_USER]> (trace fac)
;; Tracing function FAC.
(FAC)
[CL_USER]> (fac 5)
1. Trace: (FAC '5)
2. Trace: (FAC '4)
3. Trace: (FAC '3)
4. Trace: (FAC '2)
5. Trace: (FAC '1)
5. Trace: FAC ==> 1
4. Trace: FAC ==> 2
3. Trace: FAC ==> 6
2. Trace: FAC ==> 24
1. Trace: FAC ==> 120
120
[CL_USER]> 
于 2008-10-24T06:25:12.410 回答
3

如果CLOS是一个选项,则它具有其他方法之前、之后和周围运行的 before、after 和 around 方法。

于 2008-10-28T03:41:44.417 回答
2

Common lisp 有一个 TRACE 函数,它报告指定的每个调用的函数、参数和结果值。这是 Steel Bank 版本的文档页面,但您应该在大多数实现中找到类似的内容:

http://www.sbcl.org/manual/Function-Tracing.html

该系统还包括一个分析器:

http://www.sbcl.org/manual/Det​​erministic-Profiler.html

于 2008-10-23T22:27:24.577 回答