随笔分类 - Types and Programming Languages
摘要:引入 序列 List、树 Tree 具有同样的特点:可能任意长短,但是结构简单并有规律 相比于将这几种数据类型区分开,我们选择将它们概括为一种基本形式,即归纳类型 利用变式类型和元组类型,我们尝试再次定义 List 如下: NatList = <nil: Unit, cons: {Nat, NatL
阅读全文
摘要:基本类型 Base Types 用 A B C 表示基本类型 base types / atomic types 名称, 表示基本类型组成的集合 当展示求值的结果时,将省略 λ 抽象体,直接简记为一个 <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
阅读全文
摘要:导论 这一章节和下一章节构建了一套工具服务于仅含布尔值和数值的小型语言 这个小型语言非常简单,但是可以承载几个非常重要的概念 抽象语法 abstract syntax 归纳定义和证明 inductive definitions and proofs 求值 evaluation 运行时错误 runti
阅读全文