SICP阅读笔记

https://mitpress.mit.edu/sites/default/files/sicp/index.html   本书官网

http://www.math.pku.edu.cn/teachers/qiuzy/books/sicp/errata.htm   中译本勘误表

https://blog.csdn.net/weixin_33894640/article/details/89416538 mit为何停掉SICP

https://sicp.readthedocs.io/en/latest/      SICP解题集

lisp是函数式语言

序:

  编程不只是堆砌API,还有程序设计,算法,数据结构。

  各种数据结构算法的优缺点,这些是基本功。对底层实现的了解,可以让你优化代码,提高性能。如P10

  程序结构清晰,易读。代码优美。用好的算法,好的数据结构。

第一章:过程的抽象

  定义变量就是将一个变量名和值关联起来,这个关联是什么实现的,是用了某种数据结构吗?

  加号减号在全局环境中,像变量一样,和某个相应的指令序列相关联,加号就是变量名。这是简单运算的部分实现。

  define属于特殊形式。简单运算是组合式。

  变量都有作用域,这又是如何实现的?

  环境在lisp这样的交互语言中是至关重要的,没有环境,符号x就没有意义,甚至于加号减号也要环境赋予意义。

  还有最简单的表达式求值的实现?

  编译器和解释器的区别?


  组合式求值规则,里面可以包含复合过程。define属于特殊形式,不同与组合式求值。

  求值模型有:正则序求值和应用序求值。

  线性迭代过程和递归计算过程的区别P23

  递归过程和递归计算过程不一样。线性迭代过程和递归计算过程都用了递归,即调用了自身。线性迭代过程和递归计算过程是计算机过程的进展方式

  平时用的for等等循环语句都是迭代的。

  那线性迭代过程和递归计算过程的优缺点呢?

       树形递归可能及其低效,但容易描述和理解。会产生许多冗余计算。递归深度受限于解释器所允许的最大递归深度

  树形递归的题的思路都是自底向上。

  时间复杂就是需要几步完成,而空间可以简单理解成程序展开后的胖瘦。

  算法和数学挂钩,设计递归算法,迭代算法的能力。什么时候用递归,什么时候用迭代,算空间时间复杂度。

  

  第一章主要讲了两种抽象:

  第一步抽象:把一些数值操作定义成方法;第二步抽象:找出模式,把方法作为数值操作,模式不变,改变数值(方法)就行

  都是关于过程的抽象

第二章:构造数据抽象

  

 

  

猜你喜欢

转载自www.cnblogs.com/FSTRACE/p/12695954.html