2008-10-23 9 views
3

공통 리스프로 인트로 프로퍼티를 가정합니다. 함수 호출시와 실행 완료 시점을 알려주는 코드를 일반적인 lisp 코드에 어떻게 추가 할 수 있습니까? 임의의 lisp 코드와이 특정 수정을 코드에 적용하려고합니다. 나는 리스프의 AST 분석으로 이해할 수있다.Lisp 내성? 함수가 호출 될 때 그리고 종료 할 때

답변

6

은 당신이 (trace function)를 사용할 수 있습니다

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

이 시스템은 또한 프로파일을 포함을 간단한 메커니즘. 좀 더 복잡한 것에 대해서는 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/Deterministic-Profiler.html

관련 문제