문제

공통 LISP와 함께 내성적 특성을 가정합니다. 함수가 호출 될 때와 실행이 완료된시기를 알려주는 공통 LISP 코드에 코드를 추가하려면 어떻게해야합니까? LISP 코드 와이 특정 수정을 코드로 가져 가고 싶습니다. LISP의 AST 분석을 통해 가능해야합니다.

도움이 되었습니까?

해결책

당신이 사용할 수있는 (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]> 

다른 팁

만약에 클로스 옵션입니다 전, 후 및 주변 방법 그것은 다른 방법들 앞에서, 그리고 다른 방법들을 따라 실행됩니다.

공통 LISP에는 지정된 각 호출의 함수, 인수 및 결과 값을보고하는 추적 기능이 있습니다. 다음은 Steel Bank 버전의 DOC 페이지는 다음과 같습니다. 그러나 대부분의 구현에서 유사한 것을 찾아야합니다.

http://www.sbcl.org/manual/function-tracing.html

이 시스템에는 프로파일 러도 포함됩니다.

http://www.sbcl.org/manual/deterministic-profiler.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top