美文网首页
SICP第一章总结

SICP第一章总结

作者: 挖矿的菜鸡 | 来源:发表于2017-05-07 22:27 被阅读0次

第一章主旨思想

利用程序(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

相关文章

网友评论

      本文标题:SICP第一章总结

      本文链接:https://www.haomeiwen.com/subject/xwjptxtx.html