Ünlü kitap SICP'yi kullanıyorum. 1.18 egzersizinde tuhaf bir şey olur. Ben "iz" fonksiyonu kullanılarak yapıldıBu somut durumda, Racket'te "iz" in nasıl çalışması gerekiyor?
(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)))))
:
Bu kodu yazdım.(require racket/trace)
(trace fast-mult)
Bu "trace", işlevin son çıktıya kadar izlediği tüm adımları göstereceğini düşündüm. Dolayısıyla, ben düşündüm çağrıldıktan sonra
Ben alacağı (hızlı-mult 4 3)
:
> (fast-mult-iter 4 3)
< 12
: Ancak
> (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
ne olur aşağıdaki alıyorum olmasıdır
Bu neden oluyor? Racket'te eserlerin nasıl çalıştığını yanlış anladım mı?
Neden birisi bana bir downvote verdi? Sorumum kötü mü? –
Meh, muhtemelen sadece soruyu sorma şeklini beğenmeyen biri. Az ya da çok iyi bir soru olduğu için fazla düşünmezdim. –