會(huì)遞歸直到堆棧溢出。
原因是 在 new-if 還沒(méi)有展開(kāi)為 cond special forms 時(shí),else-clause 子式已經(jīng)陷入了無(wú)限遞歸。 做了以下實(shí)驗(yàn),可以驗(yàn)證
(define (new-if pred thenc elsec)
(cond (pred thenc)
(else elsec)))
(define (iter x y)
(new-if (= x y)
0
(iter (+ x 1) y)))
(define (iter-if x y)
(if (= x y)
0
(iter-if (+ x 1) y)))
(define (iter-cond x y)
(cond ((= x y) 0)
(else (iter-cond (+ x 1) y))))
對(duì)于 (iter 1 10), (iter-if 1 10), (iter-cond 1 10)
其中 iter 會(huì) 導(dǎo)致堆棧溢出,而 iter-cond 和 iter-if 并不會(huì)。
此題同1.5
在1.5中,由于應(yīng)用序的原因,在 test 表達(dá)式 還沒(méi)有展開(kāi)為 if 特殊形式(special forms)時(shí), (p)已經(jīng)陷入了無(wú)限遞歸。