2012-09-11 109 views
5

除了問題What's the explanation for Exercise 1.6 in SICP?。 因此,Dr.Retet(R5RS)在有限時間內用「if」評估sqrt-iter函數,清楚地顯示了正常的順序評估。但是,如果使用從運動1.5SICP練習1.5和1.6

(define (p) (p)) 
(define (test x y) 
    (if (= x 0) 
     0 
     y)) 
(test 0 (p)) 

例如它進入無限循環,使我想到「如果」使用應用性秩序的評價。 那麼我錯在哪裏?

回答

8

會發生什麼情況是,if永遠達不到:評價的應用性順序恰恰是因爲這兩個參數,以獲得test實際上調用test之前評估,並表達(p)將永遠循環下去。

如果使用正常順序評估相同的過程,它將返回零,這就是這個例子試圖首先證明的。

3

使用DrRacket在第一線#lang計劃指令,我嘗試了這種方式...

;say "hi" to Ben Bitdiddle 

(define (q) (display "Hello?...Ben?) 

(define (test x y) 
(if (= x 0) 
    0 
    y)) 

然後我用了DrRacket 5.3調試工具逐步評價。
這顯然是適用性順序評估。

評估窗口顯示 - >你好? Ben?然後是0 cuz DrRacket在進入「if」之前評估對(q)的呼叫。