sicp 1.6

if的新版本,用cond实现的new-if:

 

(define (new-if predicate then-clause else-clause)
  (cond (predicate then-clause)
		(else else-clause)))

 

重写的求平方根的程序:

 

(define (sqrt-iter guess x)
  (new-if (good-enough? guess x)
		  guess
		  (sqrt-iter (improve guess x)
					 x)))

 

如果是正则序求值,if的新版本可以正确运行。

但是应用序求值,则会陷入无限递归,不断调用(sqrt-iter (improve guess x) x)。作为特殊的语法形式if,和函数new-if的求值顺序是不同的。new-if会先对参数求值。

你可能感兴趣的:(SICP)