【SICP练习】2 练习1.6
练习 1.6 这道题通过由一个新版本的 if 来引出,主要讨论的还是应用序和正则序的问题。我看到“将 if 提供为一种特殊形式”时还满头雾水,并不太清楚什么特殊形式。当再返回看 if 的语法时才发现,这在第 12 页 if 的一般表达式下面一段。如果 <predicate> 得到真值,解释器就去求值 <consequent> 并返回其值。注意,在此处已经返回其值了,并没有进行后续运算。 而通过 cond 写出来的常规过程的 if ,在解释器采用应用序求值的情况下,如果第一次运算 good-enough? 时为真,则直接返回了 guess 。 原文中的求平方根的程序: (define (new-if predicate then-clauseelse-clause) (cond(predicate then-clause) (elseelse-clause))) (define (sqrt-iter guess x) (new-if(good-enough? guess x) guess (sqrt-iter (improve guess x) x))) (define(sqrt-iter guess x) (if(good-enough? guess x) guess (sqrt-iter (improve guess x) x))) 于是博主进行了如下测试: (sqrt