要點(diǎn):
正則序:先展開過程窍帝,再求值努潘。
應(yīng)用序:先求值,再代入過程坤学。
如SICP習(xí)題1.5中答案所述疯坤,對于以下代碼:
(define (p) (p))
(define (test x y)
(if (= x 0)
0
y))
(test 0 (p))
如果解釋器采用的是應(yīng)用序,則程序會不斷地執(zhí)行深浮,因?yàn)樾枰笾?em>p函數(shù)压怠,然而p函數(shù)返回自己,因此進(jìn)入死循環(huán)飞苇。
(test 0 (p))
(test 0 (p))
(test 0 (p))
...
而對于采用正則序的解釋器菌瘫,程序則能成功輸出0
,因?yàn)椴伎ǎ忉屍飨日归_過程雨让,再求值(如果表達(dá)式有用到,而這里因?yàn)閤=0忿等,并沒有用到p函數(shù))栖忠,過程是這樣的:
(test 0 (p))
(if (= 0 0) 0 (p))
(if #t 0 (p))
0