SICP就是名著“
Structure and Interpretation of Computer Programs” ,著名的巫师书(Wizard Book)和紫书(Purple Book)。虽说英文原版可以从网上合法
下载,但
中文版翻译也还不错。 闲话少叙,下面我们研究一下书中
1.1.7节的练习题1.6。原题是和用牛顿法求平方根的例子相联系,显得有点复杂,下面我在保持题目原意的前提下将它改得简单一些。 假设我们写一个阶乘函数,如下所述:
(define (n! n)这是一个递归实现,用它在解释器下实验一下:
(if (= n 1) 1 (* n (n! (- n 1)))))
guile> (n! 4) 24嗯,一切正常。 这时候二愣子兄弟说话了:在Scheme中本来已经有了一个cond,为何还有if的存在必要?if完全可以由cond实现出来,如下面定义的newif:
(define (newif predication then-clause else-clause)
(cond (predication then-