簡體   English   中英

在這個具體案例中,“跟蹤”應該如何在Racket中運行?

[英]In this concrete case, how is “trace” supposed to work in Racket?

我正在使用着名的書籍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 4 3)

我會得到:

>  (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

為什么會這樣? 我是否誤解了Racket中跟蹤的工作原理?

你很近。 trace沒有給出您期望的結果的原因是因為您只跟蹤fast-mult ,而不是fast-mult-iter 如果您將跟蹤線修改為:

(trace fast-mult fast-mult-iter)

然后你得到的結果是:

>(fast-mult 4 3)
>(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

你期望的答案是什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM