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)
私は、この「トレース」が最終出力まで関数が従うすべてのステップを表示すると思っていました。しかし、何が起こることは、私は次のことを得ることである
> (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
を::
> (fast-mult-iter 4 3)
< 12
したがって、私は
(3 4高速MULT)
を呼び出した後、私はなるだろうと思いましたなぜこれが起こりますか?私はラケットのトレースがどのように機能するのか誤解しましたか?
なぜ誰かが私にdownvoteを与えたのですか?私の質問は悪いですか? –
ええ、それはたぶんあなたが質問した方法を好きではないだけの人です。私は多かれ少なかれ精細な質問であると思っています。 –