5
나는 유명한 책 SICP를 사용하고 있습니다. 운동 1.18에서 이상한 일이 일어난다. 나는 "추적"기능을 사용하고 있었다이 구체적인 경우 라켓에서 "추적"이 어떻게 작동해야합니까?
(define (double n) (* 2 n))
(define (halve n) (/ n 2))
(define (fast-mult a b)
(fast-mult-iter a b 0))
(define (fast-mult-iter a b counter)
(cond ((= b 0) counter)
((even? b) (fast-mult-iter (double a) (halve b) counter))
(else (fast-mult-iter a (- b 1) (+ a counter)))))
:
는이 코드를 썼다.(require racket/trace)
(trace fast-mult)
나는이 "추적"모든 기능이 최종 출력까지 다음 단계를 나에게 보여 거라 생각 했어요. 따라서, 나는 생각했다 그 호출 한 후
내가 얻을 것이다 (빠른 멀티 포트 4 3)
:
> (fast-mult-iter 4 3)
< 12
그러나
> (fast-mult-iter 4 3 0)
> (fast-mult-iter 4 2 4)
> (fast-mult-iter 8 1 4)
> (fast-mult-iter 8 0 12)
< 12
를, 무슨 일 나는 다음과 같은 얻을 수 있다는 것입니다
왜 이런 일이 발생합니까? 나는 라켓에서 추적이 어떻게 작동하는지 오해 했습니까?
왜 누군가 내게 downvote를 주었습니까? 내 질문이 나쁜가요? –
맙소사, 아마도 당신이 질문 한 방식을 좋아하지 않는 사람 일 겁니다. 나는 그것이 더 많거나 적은 훌륭한 질문이기 때문에 너무 많이 생각하지 않을 것이다. –