2012-09-11 7 views
5

質問What's the explanation for Exercise 1.6 in SICP?に加えて。 Dr. Racket(R5RS)は有限時間内に "if"を使ってsqrt-iter関数を評価し、正常な順序評価を明確に示しています。しかし、私がエクササイズからの例を使用すると、私は "if"が申請注文評価を使用していると思うようになります。 だからどこが間違っていますか?何が起こるSICPエクササイズ1.5および1.6

答えて

8

ifに達したことはありませんということです:からこそ評価の応用的オーダーでtestの両方の引数はが実際にtestを呼び出す前を評価され、そしていつまでも表現(p)がループます。

通常の順序で同じ手順を評価した場合、ゼロを返します。これは、この例題が最初に実証しようとしていることです。最初の行でます#langスキームディレクティブでDrRacketを使用して

3

は、私が...それを

;say "hi" to Ben Bitdiddle 

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

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

をこの方法を試してみましたそれから私は評価をステップ実行するDrRacket 5.3デバッグ・ツールを使用していました。
明らかに申請注文評価です。

評価ウィンドウが表示されます - >こんにちは? ...ベン?それに続いて0のcuz DrRacketは "if"を入力する前に(q)の呼び出しを評価します。

関連する問題