这是本文档旧的修订版!


《计算机程序的构造与解释》笔记

  • SICP:Structure and Interpretation of Computer Programs
  • 本书使用 Lisp 方言 Scheme 来教学。ubuntu 14.04 可安装 scheme-r5rs包(不知道为何没有 mit-scheme包)
  • 每一种语言提供了三种机制:
    • 基本表达形式:语言关心的最简单个体
    • 组合的方法:通过它们来从简单元素构造复合的元素
    • 抽象的方法:为复合对象命名并作为操作单元
  • 程序设计处理的两类要素:过程和数据(但并不严格区分)
  • 1.1.1 前缀表达式 137 + 349(+ 137 349) , 可避免多参数歧义,可嵌套。
  • 1.1.2 Scheme 用 define 命名变量
  • 1.1.3 组合式的求值是递归的,计算过程为树形积累;不同于一般性求值规则的特殊形式,比如 define用于关联变量
  • 1.1.4 过程定义。定义平方操作(define (square x) (* x x)), 过程定义的一般形式是:
    (define (<name> <formal parameters>) <body>)
  • 1.1.5 过程应用的代换模型。
    • 正则序求值:完全展开二后归约;
    • 应用序求值:先求值参数而后应用;
    • Lisp 采用应用序求值,避免对于表达式的重复求值,替换范围过大时正则序处理变得复杂。
  • 1.1.6 条件表达式。
    • 另一个特殊形式:分情况分析cond
      (cond (<p1> <e1>)
            (<p2> <e2>)
            ...
            (<pn> <en>))

      执行时直到 px 真,则返回 ex.

    • if:
      (if <predicate> <consequent> <alternative>) 
    • 逻辑复合谓词,三个常见复合运算符:
      ; 有假则返回假,后续不判断,全真则返回 en
      <and <e1> ... <en>)
      ; 有真则返回第一个真,后续补判断,全假则返回假
      <or <e1> ... <en>)
      ; e 真返回假,e 假返回真
      <not <e>)
  • public/cs/sicp.1451135043.txt.gz
  • 最后更改: 2015/12/26 21:04
  • oakfire