CMU 15-150笔记

主要是对于CMU 15-150课程的幻灯片等材料的翻译.

第1章 求值和定型, 绑定和作用域

第1.1节 引入

今天我们给出了课程的大纲及其目标, 包括引用透明, 外延等价, 以及并行. 我们从观察其类型开始探索SML语言.

关键概念

第1.2节 幻灯片

第1.2.1小节 课程哲学

第1.2.2小节 计算是函数式的

第1.2.3小节 命令式 vs. 函数式

命令表达式
被执行被求值
具有副作用无副作用
x := 53 + 5
(新状态)(新值)

第1.2.4小节 编程作为阐释

第1.2.5小节 并行

1,0,0,1,131,0,1,0,131,1,0,1,140,0,0,1,1212
sum: int sequence -> int
type row = int sequence
type room = row sequence
fun count (class: room): int = sum (map sum class)

第1.2.6小节 分析

第1.2.7小节 代价分析

work

span

第1.2.8小节 介绍ML

第1.2.9小节 例子

     (3 + 4) * 2
=1=> 7 * 2
=1=> 14
     (3 + 4) * (2 + 1)
=3=> 21

如果使用并行, 第二个需要多少步骤?

    "the " ^ "walrus"
==> "the walrus"
"the walrus" ^ 1
ill-typed

SML从不会求值病态类型表达式!

第1.2.10小节 类型, 表达式, 值

每个良形式的ML表达式e

例子:

(3 + 4) * 2 : int
(3 + 4) * 2 ==> 14

{译注: 结合前文, 看起来是归约关系而非求值至的关系.}

第1.2.11小节 ML中的类型

第1.2.12小节 整数(类型), 表达式

第1.2.13小节 整数, 定型

(3 + 4) * 2 : int
because (3 + 4): int and 2: int
(3 + 4): int because 3: int and 4: int

第1.2.14小节 整数, 求值

第2章 函数

第2.1节 引入

第2.2节 幻灯片

第2.2.1小节 上次内容

第2.2.2小节 今天的目标

第2.2.3小节 声明

val     pi :       real = 3.14
keyword identifier type   value

这引入了一个绑定, 将pi绑定至3.14, 也可以写成[3.14/pi]. {译注: 其实就是替换的写法.}

词法静态作用域 (lexically statically scoped)

第2.2.4小节 绑定

val x : int = 8 - 5 [3/x] 
val y : int = x + 1 [4/y]

第2.2.5小节 绑定

第3章 递归和归纳

第4章 列表上的递归和结构归纳, 尾递归

第5章 数据类型, 树上的递归和结构归纳

我们将数据类型声明作为抽象形式引入, 其旨在将程序员从跟踪低级hacking约定的细节之中解放出来.

我们考虑了预先定义了的数据类型int option, 其有一个常量构造子None和一个非常量构造子Some, 其接受一个i : int以构造出Some i : int option. 我们也作成了一些我们自己的数据类型, 包括用于模拟颜色的类型, 多返回值类型, 以及一个二叉树类型.

我们展示了如何使用结构归纳证明关于树的定理.

关键概念

第6章 渐进分析

第7章 渐进分析

第8章 排序列表

第9章 多态和类型推导

第10章 高阶函数