美文网首页
SICP笔记

SICP笔记

作者: 手指放松目光如龙 | 来源:发表于2018-12-15 22:31 被阅读0次

Part I: Building Abstractions with Functions

代码组成(expression->statement->module)

任意一个python代码,均由statements组成(简单的statement, 比如import; 复合statement, 比如if, def, while, for),即:

  • statement0
  • statement1
  • statement2

实际上,大部分的代码都在evaluate the value of expression, 而这些值的关系通过statements组织在一起。

这里,引出两个概念: expression 和 statment

Expressions & Statements

Broadly, computer programs consist of instructions to either

  • Compute(evaluate) some value: expressions typically describe computations
    • primitive experssion: 3
    • call experssion: max(3, 4)
  • Carry out(execute) some action: statements typically describe actions: foo=3
    • simple statement, such as '=/import'
    • compound statement, such as 'if/def/for'

函数Function

函数提供了抽象,使得代码复用成为可能:

  • 如果没有函数, 我们所有的代码都需要从程序语言支持的原始Operation(Primitive Operation)往上一层一层构建
  • 如果没有函数,我们重用代码的途径就是Ctrl-C, Ctrl-V, 代码会变成一坨一坨的屎

函数需要区分定义(defined)和执行(executed, called):

  • def语句定义一个函数,和赋值语句没有区别,只是bind了一个name到一个value (使得定义递归函数成为可能)
  • 函数真正执行时(called), 会创建一个Local Frame, 这个Local Frame维护着该函数内部的变量

函数的引入,使得概念变为复杂:

  • 函数作为一等公民(可以作为入参、出参,可以bound to name)
  • 嵌套函数,使得(name -> value的维护,变得复杂)

嵌套函数引入前, 只需要两层的Enviroment维护name->value的关系

  • one global frame
  • multiple local frames

嵌套函数引入后,使得Enviroment由两层拓展至任意多层:

  • global frame -> frame1 -> frame2 -> …
  • variable name的查找,也一层一层往上查询,直至global frame

其他

  • 高阶函数
  • 递归函数

Part II: Building Abstractions with Data

Part III: Interpreting Computer Programs

Part IV: Data Processing

References

相关文章

网友评论

      本文标题:SICP笔记

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