我的SICP习题答案(1.6)

我的SICP习题答案(1.6)

会递归直到堆栈溢出。
原因是 在 new-if 还没有展开为 cond special forms 时,else-clause 子式已经陷入了无限递归。 做了以下实验,可以验证
(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))))

对于 (iter 1 10), (iter-if 1 10), (iter-cond 1 10)
其中 iter 会 导致堆栈溢出,而 iter-cond 和 iter-if 并不会。

此题同1.5
在1.5中,由于应用序的原因,在 test 表达式 还没有展开为 if 特殊形式(special forms)时, (p)已经陷入了无限递归。

你可能感兴趣的:(我的SICP习题答案(1.6))