Lisp内省?当一个函数被调用时以及它何时退出

Ber*_*own 3 lisp introspection

使用常见的lisp,我假设内省属性.如何将代码添加到常用的lisp代码中,这些代码将告诉我何时调用函数以及何时执行完毕.我想采取任何lisp代码和代码的这种特殊修改.我想通过lisp的AST分析,这应该是可能的.

dsm*_*dsm 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]> 
Run Code Online (Sandbox Code Playgroud)