2008-10-23 23 views
3

對於通用的lisp,我假設了內省屬性。如何將代碼添加到常見的lisp代碼中,這些代碼會告訴我何時調用函數以及何時執行完成。我想要採取任何lisp代碼和對代碼的特定修改。我用lisp的AST分析圖,這應該是可能的。Lisp自省?當一個函數被調用並且它退出時

回答

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]> 
相關問題