主要是对于CMU 15-150课程的幻灯片等材料的翻译.
今天我们给出了课程的大纲及其目标, 包括引用透明, 外延等价, 以及并行. 我们从观察其类型开始探索SML语言.
关键概念
| 命令 | 表达式 |
| 被执行 | 被求值 |
| 具有副作用 | 无副作用 |
x := 5 | 3 + 5 |
| (新状态) | (新值) |
sum: int sequence -> int
type row = int sequence
type room = row sequence
fun count (class: room): int = sum (map sum class)count的运行时间?分而治之
work
span
(3 + 4) * 2
=1=> 7 * 2
=1=> 14 (3 + 4) * (2 + 1)
=3=> 21如果使用并行, 第二个需要多少步骤?
"the " ^ "walrus"
==> "the walrus""the walrus" ^ 1
ill-typedSML从不会求值病态类型表达式!
预测, 如果表达式最终确有一个值的话 {译注: 求值过程可能因为无限进行而发散}
每个良形式的ML表达式
例子:
(3 + 4) * 2 : int(3 + 4) * 2 ==> 14{译注: 结合前文, 看起来是归约关系而非求值至的关系.}
int, real, bool, char, stringint~1, 0, 1, ... + , - , * , div , mod , ...~4 * 3: int + : int, 如果: int且: int(3 + 4) * 2 : int
because (3 + 4): int and 2: int
(3 + 4): int because 3: int and 4: intval pi : real = 3.14
keyword identifier type value这引入了一个绑定, 将pi绑定至3.14, 也可以写成[3.14/pi]. {译注: 其实就是替换的写法.}
词法静态作用域 (lexically statically scoped)
val x : int = 8 - 5 [3/x]
val y : int = x + 1 [4/y]我们将数据类型声明作为抽象形式引入, 其旨在将程序员从跟踪低级hacking约定的细节之中解放出来.
我们考虑了预先定义了的数据类型int option, 其有一个常量构造子None和一个非常量构造子Some, 其接受一个i : int以构造出Some i : int option. 我们也作成了一些我们自己的数据类型, 包括用于模拟颜色的类型, 多返回值类型, 以及一个二叉树类型.
我们展示了如何使用结构归纳证明关于树的定理.
关键概念