2010-12-12 52 views
6

一個必須決定的基礎上的值:DrRacket解釋器是否使用基於SICP練習1.5的正常順序評估?

(試驗0(P))

其中測試被定義​​爲:

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

和p被定義爲:

(define (p) (p)) 

當我評估(test 0 (p))在詮釋者進入無限循環,暗示它正在評估p。這顯示了正常順序評估,因爲操作數在替換參數之前被評估。 SICP表示LISP使用應用程序評估。

+2

從文中後面的一個有用的提示:它被稱爲「應用順序」的原因是操作數在操作符應用**之前被評估。關於第三章中的「懶惰」評估等問題,我們有更多的討論,在讀完之前我絕對不能保持這兩種觀點,他們真的應該早於第4章對它進行解釋。 – spacemanaki 2010-12-14 15:03:54

回答

13

這說明正常秩序評價,因爲操作數被替換參數

其實你得到它周圍的錯誤的方式之前評估。適用順序是操作數首先被評估的時間。正常順序是當參數被替換爲未評估的表達式時。

所以球拍使用應用程序的順序,因爲正如你所說的,首先評估參數(除非你使用「懶球拍」,在這種情況下,它使用按需呼叫又名惰性評估,除了每個參數是正常順序至多評估一次)。