Week 3
创建复合类型 Building Compound Types
- 复合类型:包含了若干基本类型的类型
- 三种主要的复合类型构建方式:
- “Each of”:一个
t
的值包含了t1 t2 ... tn
的每一个值 - “One of”:一个
t
的值包含了t1 t2 ... tn
中的其中一个值 - 自我引用:一个
t
的值可以引用其他t
的值 - 元组是“Each of”类型
- 选项是“One of”类型
- 列表则是三者皆有(可全是,可空,可包含另一个list)
- “Each of”:一个
记录 Records
- 一种“Each of”类型
- 由命名域(name field)构成,每个命名域对应一种类型(基本类型或者是上述的复合类型)
- 在存储时,命名域的顺序并不重要,标准情况下,命名域的存储顺序为字典序
- 值:域名保持值
{f1 = v1, ..., fn = vn}
- 类型:域名对应类型
{f1 = t1, ..., fn = tn}
- 构建一个记录:
{f1 = e1, ..., fn = en}
- 方问记录中的其中一项:
#filedname e
- 对于记录,域名称的顺序并不重要,因为记录并不依赖各个元素的相对位置访问
- 当访问一个记录中没有定义的域名时,会产生类型错误
- 记录和元组有很多的相似的地方,相对来讲元组更短,但是人为地访问元素,用记录则更加方便,当元素很多的时候,用记录要比元组好用得多(前者只需要记住名字,后者则要记住元素的相对顺序)
元组,语法糖 Tuples as Syntactic Sugar
- 在ML中,实际上元组是一种特殊的记录,即元组中的元素实际上是按照排列顺序在一个记录中从1开始用数字做命名域的对应值
- 这是一种语法糖:
- 实现更简单
- 核心语言更小更简单
- 将整个语言的模型变得更小使证明变得更短
(e1, ..., en)
实际上是{1=e1, ..., n=en}
的另外一种写法- 元组实际上使针对上述的一种记录写法的语法糖
- 语法:我们可以完全通过对应的记录的语法来完整地描述语义
- 糖:让整个语言更加舒适(sweeter)
- 语法糖的好处
- 简化理解
- 简化实现
- ML中的其他语法糖例子:andalso等对条件语句的替代