Używam słynnej książki SICP. W ćwiczeniu 1.18 dzieje się dziwna rzecz.W tym konkretnym przypadku, w jaki sposób "ślad" ma działać w Rakiecie?
Napisałem ten kod:
(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)))))
używałem funkcji "śledzenia".
(require racket/trace)
(trace fast-mult)
Myślałem, że ten "ślad" pokaże mi wszystkie kroki, które funkcja spełnia, aż do końcowego wyniku. Dlatego pomyślałem, że po wywołaniu
(fast-mult 4 3)
chciałbym uzyskać:
> (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
Jednak to, co się dzieje, że mam następujące:
> (fast-mult-iter 4 3)
< 12
Dlaczego tak się dzieje? Czy źle zrozumiałem, jak działa ślad w Rakiecie?
Dlaczego ktoś dał mi zniżkę? Czy moje pytanie jest złe? –
Meh, to pewnie ktoś, kto nie lubi sposobu, w jaki zadałeś to pytanie. Nie zastanawiałbym się nad tym zbytnio, ponieważ jest to mniej lub bardziej delikatne pytanie. –