mirror of
https://github.com/gnu4cn/rust-lang-zh_CN.git
synced 2024-12-27 13:21:09 +08:00
Improve Ch15
This commit is contained in:
parent
25ddf2ab0f
commit
dd4dfaedd3
@ -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 中的代码:
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user