美文网首页
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