SICP第一章总结

第一章主旨思想

利用程序(procedure)来表达抽象的概念

  1. 利用简单的思想整合成一个复合的概念.
  2. 清晰地分析出程序的逻辑,把一个复杂的程序拆分成独立的部分.
  3. 从具体存在的(类似的)程序中提取出一个通用的概念并写成程序.

程序的成分(elements)

程序有自己的名字(variable, argument)和操作符号(operator),除此之外就是条件语句,利用这三个部分有机结合就可以写出一个完整的程序.

程序运行(evaluate)的过程

程序运行的过程最直观的表现我觉得是使用程序框图,这里有两个结构需要留意,一个是回归结构(recursive),一个是迭代结构(iteration).
这两个结构牵扯出来的就是空间复杂度(growth of space)和步骤复杂度(growth of steps)的计算方法.

而对于写程序而言,这两种结构通常可以互换,回归模型相对来说在空间复杂度上会更高一点. 一般对于涉及到回归过程(recursive procedure)的程序,回归过程(recursive process)会相对更容易实现,因为我觉得相对比较直观,然后通过一些转换,可以讲回归过程转变成迭代过程.

回归过程

对于写回归模型我总结了一些自己的心得,在做题的时候找到一个通用思想,简单来说就是把题目划分成三个部分

  1. 可以重复利用的部分,或者说是循环引用的部分.
  2. 循环到底的底线情况,也就是最最最后一层循环的情况.
  3. 循环结果之间的关系,他们是如何整合的?相加亦或是别的.

迭代过程

迭代过程主要是如何将一个循环过程进行转换,从而使用迭代模型.
这里的技巧在于引进一个可以保存结果的辅助函数,辅助函数可以相对减少空间复杂度.
一般来说辅助函数和回归过程的参数一致,但是多了一个记录结果的参数,有时还会有辅助计数器.
在思想上,回归模型通常从起始层(迭代的最初层)开始,一步步直到问题的边界情况出现,然后再沿着模型的回归逻辑,一步步回溯计算.
而迭代模型通常计算顺序是和回归模型相反,从边界开始计算,一直到迭代最外层(表达不好这个,用词还需要斟酌).

使用抽象概念编程(编写抽象程序)

利用抽象概念编程主要是讲程序作为参数带入另一个程序,而且返回值还可以是其他的程序,利用Python的表达方式应该是这样的.

主程序(参数程序1, 参数程序2)-->返回程序3

程序既可以作为参数,也可以作为返回值.

lambda

lambda在抽象概念的应用上是一个方便的存在,lambda用于书写匿名函数,可以减少代码量.但是需要注意的是在需要重复调用的程序上,lambda是无能为力的,这个时候要老老实实的写出一个带有名字的函数(procedure).例题1.46就是一个很好的例子.

第一章总结完了,我的github

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 文档:1.6 Elements of Programming参考:cs61a.org/spring2018 1.6...
    olivia_and_dog阅读 898评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,837评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,856评论 25 708
  • 坐在电脑前,打下这几个字的时候,时钟已经划到最后两个小时,我才开始写今天的打卡文章。唉,有意无意中,又拖延到了现在...
    捡岁拾光阅读 163评论 0 0
  • 2017年5月10日 天气晴 星期三 又是忙碌的一天,手里的活还没干完,她姥姥就给我打电话说“:赶紧...
    陌上清歌的简书阅读 197评论 0 0