摘要:
基本类型 Base Types 用 A B C 表示基本类型 base types / atomic types 名称,$ A $ 表示基本类型组成的集合 当展示求值的结果时,将省略 λ 抽象体,直接简记为一个 <fun>,比如 λx : B . x > <fun> : B → B 单位类型 Uni 阅读全文
摘要:
函数类型 因为纯粹的 lambda 演算是 turing 完备的,因此只有运行时才能够完全确定类型,比如: if <complex evaluation> then true else (λx.x) 定义函数类型:λx.t: →;为了更加精确,加入参数 T1 T2,得到如下递归定义: 定义:类型 B 阅读全文
摘要:
静态类型 在 Untyped Arithmetic Expressions 里有如下定义: 如果一个范式不是一个值,则称此项受阻 在这个小型语言里引入两个类型 Nat Bool,来区分布尔值项和数值项 断言“项 t 有类型 T”意味着 t 的运算结果的类型在运行之前就可以被确定,比如 succ 0; 阅读全文
摘要:
无名称项 de Bruijn 使用自然数来表示项,而不是字母组成的名称;自然数 k 表示绑定于相对于当前层第 k 个 绑定器 binder 的囿变量(the variable bound by the k'th enclosing λ) 马世龙版《类型和程序设计语言》使用“囿”来形容这种被界定的关系 阅读全文
摘要:
引入 在 lambda 演算中,所有事物都是函数 lambda 演算式中有三种项: 变量 x,形如 x 函数抽象 abstraction,形如 λx . t1 将项 t1 作用于 t2,形如 t1 t2 有如下的简单的递归定义来总结上述三种项的形式: t ::= x (variable) λx.t 阅读全文
摘要:
信息的表示和处理 大端法和小端法 对于跨越多字节的程序对象而言 大端法: 高位有效字节存放在低位地址(前面) x = 0x60b7182f 60 b7 18 2f # 地址从低到高增长 小端法: 低位有效字节存放在低位地址(前面) x = 0x60b7182f 2f 18 b7 60 # 地址从低到 阅读全文
摘要:
导论 这一章节和下一章节构建了一套工具服务于仅含布尔值和数值的小型语言 这个小型语言非常简单,但是可以承载几个非常重要的概念 抽象语法 abstract syntax 归纳定义和证明 inductive definitions and proofs 求值 evaluation 运行时错误 runti 阅读全文