3
피보나치 재귀의 트리 재귀 구현과 같은 함수가 주어지면 (fib 5)
과 같은 표현식 평가에서 각 단계를 어떻게 표시 할 수 있습니까?스킴 확장 프로 시저 호출
(fib 5)
(+ (fib 4) (fib 3))
(+ (+ (fib 3) (fib 2)) (+ (fib 2) (fib 1)))
(+ (+ (+ (+ (fib 1) 0) (fib 1) (+ (fib 1) 0)) (+ (+ (fib 1) 0) (fib 1)))
(+ (+ (+ (+ 1 0) 1 (+ 1 0)) (+ (+ 1 0) 1))
내가 quasiquoting를 사용하여, 당신은 부분적으로 식을 계산할 수 있다는 것을 알고, 같이 :
(define (fib n)
(cond ((= n 0) 0)
((= n 1) 1)
(else (+ (fib (- n 1)
(fib (- n 2))))))
예를 들어, 내가 출력 싶습니다 그러나
`(+ ,(* 3 4) (- 0.1 2)) ; evaluates to -┐
(+ 12 (- 0.1 2)) ; <----┘
을, 내가 가진 이 단계를 사용하여 평가의 각 단계를 보여주지 못했습니다. 나는 Peter Norvig의 lis.py과 같은 스킴 인터프리터를 수정할 수 있다는 것을 알고 있지만, 언어 자체 내에서이를 수행하는 방법을 원합니다. 어떻게해야합니까?
아, 나는 잘못 된 장소에서 쿼시 콰이어하고 있었고, 나는 그 것을 프로 시저 몸체 밖에서 계속 사용했다. 고맙습니다! – tlehman
@TobiLehman 내 기쁨! –
나는 라켓을 조사해야 할 것입니다. 매우 시원합니다. 내가하고 싶은 것은 SICP 68 페이지와 같은 트리 시각화를 생성하는 것입니다. GraphViz를 사용하면 "(fib 3) -> (fib 2)", "(fib 3) -> (fib 1)"과 같은 부모 - 자식 쌍을 출력하고'dot '을 사용하여 그것을 PNG로 렌더링하십시오. 각 함수 호출을 (begin (display ..)) 문으로 래핑 할 수 있습니다. – tlehman