Summary
列表是 OCaml 中非常有用的内置数据结构。该语言提供了一种轻量级的语法来构建它们,而不是要求您使用库。访问列表的部分利用了模式匹配,这是一个非常强大的特性(正如您可能从其相当冗长的语义中期待的那样)。随着课程的进行,我们将看到模式匹配的更多用途。
这些内置列表是作为单链表实现的。当您的需求超出小到中等大小的列表时,这一点很重要。在长列表上使用递归函数将占用大量堆栈空间,因此尾递归变得重要。如果您尝试处理非常庞大的列表,您可能根本不想使用链表,而是使用一种能更好地利用内存局部性的数据结构。
OCaml 提供了变体(一种类型)、元组和乘积(每种类型)以及选项(可能类型)的数据类型。模式匹配可用于访问这些数据类型的值。模式匹配可用于 let 表达式和函数中。
关联列表结合了列表和元组,创建了字典的轻量级实现。
变体是一种强大的语言特性。它们是在函数式语言中表示数据的主力军。OCaml 变体实际上将几个理论上独立的语言特性合并为一个:和类型、积类型、递归类型以及参数化(多态)类型。其结果是能够表达许多种类的数据,包括列表、选项、树甚至异常。
术语和概念
- algebraic data type 代数数据类型
- append 追加
- association list 关联列表
- binary trees as variants 二叉树作为变体
- binding 绑定
- branch 分支
- carried data 传输数据
- catch-all cases 全包式案例
- cons 缺点
- constant constructor 常量构造函数
- constructor 构造函数
- copying 复制
- desugaring 解糖
- each-of type 每个类型
- exception 例外
- exception as variants 异常作为变体
- exception packet 异常数据包
- exception pattern 异常模式
- exception value 异常值
- exhaustiveness 详尽性
- field 领域
- head 头部
- induction 归纳
- leaf 叶
- list 清单
- lists as variants 列为变体
- maybe type 也许类型
- mutually recursive functions 相互递归函数
- natural numbers as variants 自然数作为变量
- nil 空
- node 节点
- non-constant constructor 非常量构造函数
- one-of type 独特类型
- options 选项
- options as variants 选项作为变体
- order of evaluation 评估顺序
- pair 对
- parameterized variant 参数化变体
- parametric polymorphism 参数多态性
- pattern matching 模式匹配
- prepend 添加
- product type 产品类型
- record 记录
- recursion 递归
- recursive variant 递归变体
- sharing 分享
- stack frame 栈帧
- sum type 求和类型
- syntactic sugar 语法糖
- tag 标签
- tail 尾部
- tail call 尾调用
- tail recursion 尾递归
- test-driven development (TDD) 测试驱动开发(TDD)
- triple 三重
- tuple 元组
- type constructor 类型构造函数
- type synonym 类型同义词
- variant 变体
- wildcard 通配符
进一步阅读
- Objective Caml 简介,章节 4,5.2,5.3,5.4,6,7,8.1
- OCaml 从最初开始,第 3、4、5、7、8、10、11 章
- 现实世界中的 OCaml,第 3、5、6、7 章