SICP 读书笔记

前言

《SICP》我之前试着读过两次,但是到Y组合子那里就卡住了。很是尴尬。然后又买了《The Little Schemer》, 《The Seasoned Schemer》来帮助理解Y组合子 ,在读了诸多文章后,终于算是理解了Y组合子。今天终于算是读完了此书。真得是一本好书!如果能用两个学期,好好学一学,然后做做习题,收获应该会很多。但是我精力有限,未读书单略长,所以这次读得比较糙,以后有精力再精读吧。

细节

Y组合子

前两章的精华应该就在Y组合子了。首先是在一个简单的λ演算系统中,因为匿名函数的要求,无法直接构造递归,但是通过Y组合子以及一些有良好定义的函数,可以通过寻找函数的不动点来完成递归的构造。书中提到的Y组合子只能用于只有一个变量的函数,用最简单的情况来证明Y组合子的可行性(也被称为穷人的Y组合子,适用于两个变量的函数的Y组合子就比较复杂了,但是也就可以用来构造While和For循环了)。

递归

Euclid’s Algorithm求GCD,求阶乘,求Fibonacci数列被用来展示不同的递归。GCD可以优化为尾递归,阶乘可以用来演示惰性求值,Fibonacci用来演示树形递归。

Sequence & Stream

学习到了一个新的视角去理解副作用:函数中有一个隐含变量:时间t。并行的复杂性就是时间的不同步引起的。另外通过构建Sequence去掉时间的影响也是一个很妙的思路。Stream通过引入延迟求值使得一些计算可以持续推进,有点Just in time的感觉。

构建机器

最后两章从不同的角度构建了一台机器去运行程序,基本就是计算机原理的解释,特别是最后一章,我完全就是囫囵吞枣读过去了,因为《Computer Systems:A Programmer’s Perspective》《程序员的自我修养:链接、装载与库其实要比它讲得更细。

总结

还有些细节我想不起来了,但我基本对这本书有了大概的概念,以后如果想起什么来了再补充。这本书特别好的地方就是对概念的启发与引导特别棒,如果能配合练习习题,对搭建对计算机程序知识的框架特别有好处。编程主要靠组合与抽象,其实反过来讲也是我们理解世界的方式,通过解构拆解组合,然后分析其中的抽象,最后得到基本的东西,不是吗?!