Improve Ch15

This commit is contained in:
Unisko PENG 2023-05-06 15:59:27 +08:00
parent 25ddf2ab0f
commit dd4dfaedd3

View File

@ -67,17 +67,17 @@ fn main() {
所谓 *构造列表cons list*,是来自 Lisp 编程语言及其方言的一种数据结构,由嵌套对组成,是 Lisp 版本的链表is made up of nested pairs, and is the Lisp version of a linked list。其名称来自于 Lisp 的 `cons` 函数是构造函数construct function的简称该函数从其两个参数构造出一个新嵌套对。通过对由一个值与另一嵌套对组成的嵌套对上调用 `cons`,咱们便可构造出由递归嵌套对组成的构造链表。 所谓 *构造列表cons list*,是来自 Lisp 编程语言及其方言的一种数据结构,由嵌套对组成,是 Lisp 版本的链表is made up of nested pairs, and is the Lisp version of a linked list。其名称来自于 Lisp 的 `cons` 函数是构造函数construct function的简称该函数从其两个参数构造出一个新嵌套对。通过对由一个值与另一嵌套对组成的嵌套对上调用 `cons`,咱们便可构造出由递归嵌套对组成的构造链表。
比如,下面就是一个包含了列表 1、2、3 的构造列表的伪代码表示,其中各个列表分别位于一些圆括号中 例如,下面是一个包含列表 1、2、3 的构造列表的伪代码表示,每个嵌套对都在括号里
```lisp ```lisp
(1, (2, (3, Nil))) (1, (2, (3, Nil)))
``` ```
构造列表中的各个条目,均包含了两个元素:当前条目值与下一条目。列表中最后那个条目,只包含了叫做 `Nil` 的值,而没有下一条目。构造列表是有递归调用 `cons` 函数产生出的。表示该递归之基础的规范名称,是为 `Nil`the canonical name to denote the base case of the recursion is `Nil`)。请注意这不同于本书第 6 中,指无效或缺失值的 “null” 或 “nil” 概念 构造列表中的每个条目都包含了两个元素:当前条目的值与下一条目。列表中最后条目,只包含名为 `Nil` 的值,而没有下一条目。构造列表是由递归调用 `cons` 函数产生的。表示递归基础的规范名称是 `Nil`the canonical name to denote the base case of the recursion is `Nil`。请注意,这与第 6 章中的 “null” 或 “nil” 概念不同,后者是一个无效或不存在的值
在 Rust 中,构造列表不是一种常用数据结构。多数时候咱们在 Rust 中有一个条目清单时,`Vec<T>` 都是要用到的更佳选择。否则,那些更为复杂的递归数据类型,在一些不同场合,*就会是* 有用处的了,而将构造列表作为本章的开头,咱们就可以心无旁骛地探讨匣子数据结构,怎样实现递归数据类型的定义 在 Rust 中,构造列表不是一种常用数据结构。多数时候,当咱们在 Rust 中有一个条目清单时,`Vec<T>` 是一个更好的选择。那么别的时候的各种情况下,更复杂的递归数据类型,*则都是* 有用的,而在本章中以构造列表开始,咱们便可专心探讨匣子数据结构如何让我们定义出递归数据类型
下面清单 15-2 包含了构造列表的一种枚举定义。请注意由于其中的 `List` 类型没有已知大小,此代码还不会编译,对此这里将会加以演示 下面清单 15-2 包含了构造列表的一种枚举定义。请注意,这段代码还不能编译,因为 List 类型没有一个已知的大小,我们将证明这一点
文件名:`src/main.rs` 文件名:`src/main.rs`
@ -88,9 +88,9 @@ enum List {
} }
``` ```
*清单 15-2定义一个枚举来表示 `i32` 值构造列表数据结构的首次尝试* *清单 15-2第一次尝试定义一个枚举来表示 `i32`构造列表数据结构*
> **注意**:这里为此示例目的,而实现的一个仅保存 `i32` 值的构造列表。这里本可以如同第 10 章中所讨论的那样,使用泛型来实现,从而定义出一个可存储任何类型值的构造列表。 > 注意:出于这个示例的目的,咱们正在实现的一个仅包含 `i32` 值的构造列表。咱们本可以使用泛型来实现他,就像咱们在第 10 章中讨论的那样,定义一个可存储任何类型值的构造列表。
使用这个 `List` 类型来存储列表 `1, 2, 3`,看起来就会像下面清单 15-3 中的代码: 使用这个 `List` 类型来存储列表 `1, 2, 3`,看起来就会像下面清单 15-3 中的代码: