對於通用的lisp,我假設了內省屬性。如何將代碼添加到常見的lisp代碼中,這些代碼會告訴我何時調用函數以及何時執行完成。我想要採取任何lisp代碼和對代碼的特定修改。我用lisp的AST分析圖,這應該是可能的。Lisp自省?當一個函數被調用並且它退出時
3
A
回答
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]>
2
Common Lisp有一個TRACE函數,用於報告指定的每個調用的函數,參數和結果值。下面是鋼銀行版的文檔頁面,但是你應該找到類似的大多數實現的東西:
http://www.sbcl.org/manual/Function-Tracing.html
該系統還包括一個分析器:
3
如果CLOS是一個選項,它有之前運行,之後和周圍的其他方法before, after, and around methods。
相關問題
- 1. 從被調用函數中退出一個調用子程序
- 2. 當一個按鈕被按下時調用一個函數 - pyqt
- 3. 當AngularUI Bootstrap模式被解散並且動畫完成時調用函數
- 4. 發生,當它退出函數
- 5. 找出一個函數被調用
- 6. 當另一個函數被觸發時檢查函數是否被調用
- 7. Listvew未被填充並且getView函數也未被調用
- 8. 退出Python函數調用
- 9. 當DirectorySearcher.FindOne()被調用並且AD不可用時會拋出什麼異常?
- 10. 試圖導出一個函數並調用它
- 11. clearTimeout當一個函數被多次調用時
- 12. 當一個函數被調用時,活動崩潰的問題
- 13. 從python中調用函數一個一個地列出並且爲一個函數運行多次
- 14. 當輸入爲負時退出一個bool void函數C++
- 15. 當它返回true時調用另一個Javascript函數
- 16. vb.net:如何調用一個函數,只有當它存在時
- 17. 渲染沒有被調用一個API並且是另一個
- 18. 當主鍵被認爲是一個自然鍵,並且當它被認爲是代理鍵?
- 19. 如何在退出java程序時自動調用函數?
- 20. 使用$(func)調用有問題的函數時,Bash腳本不會退出第一個「退出」調用
- 21. 當調用函數時,它返回undefined
- 22. 在函數內部使用ob_ stuff並且多次調用它
- 23. 當KeyDown.Event被提出時退出Sub
- 24. 當這個JavaScript函數被調用?
- 25. 函數當輸入函數時,存儲在全局變量中的指針被設置爲0,並且在退出函數時返回到之前的狀態
- 26. 如何創建一個函數並在函數上調用它
- 27. 析構函數被多次調用並且不合適
- 28. 函數「OpenDataSource」被調用時出錯
- 29. 調用一個函數後,圖像加載,並且還出現圖像加載還調用函數
- 30. Lisp函數調用錯誤