使用常见的lisp,我假设内省属性。如何将代码添加到常用的lisp代码中,这些代码将告诉我何时调用函数以及何时执行完毕。我想采取任何lisp代码和代码的这种特殊修改。我想通过lisp的AST分析,这应该是可能的。
答案 0 :(得分: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]>
答案 1 :(得分:3)
如果CLOS是一个选项,则其before, after, and around methods在其他方法之前,之后和周围运行。
答案 2 :(得分:2)
Common lisp有一个TRACE函数,用于报告指定的每个调用的函数,参数和结果值。这是Steel Bank版本的doc页面,但在大多数实现中你应该找到类似的东西:
http://www.sbcl.org/manual/Function-Tracing.html
系统还包括一个分析器: