文章目录
- "元组"名称的由来
-
- [1. 词源学角度](#1. 词源学角度)
- [2. 数学中的起源](#2. 数学中的起源)
-
- [2.1 笛卡尔积(Cartesian Product)](#2.1 笛卡尔积(Cartesian Product))
- [2.2 n元组(n-tuple)](#2.2 n元组(n-tuple))
- [3. 数据库理论中的元组](#3. 数据库理论中的元组)
- [4. 编程语言中的演变](#4. 编程语言中的演变)
-
- [4.1 Lisp语言(1958年)](#4.1 Lisp语言(1958年))
- [4.2 ML语言(1973年)](#4.2 ML语言(1973年))
- [4.3 Python中的元组](#4.3 Python中的元组)
- [5. "元组" vs "列表" 的哲学差异](#5. "元组" vs "列表" 的哲学差异)
- [6. 命名对比:其他语言的叫法](#6. 命名对比:其他语言的叫法)
- [7. 为什么不是其他名字?](#7. 为什么不是其他名字?)
- [8. 实际代码示例:体现"元组"本质](#8. 实际代码示例:体现"元组"本质)
-
- [8.1 坐标系统(几何意义)](#8.1 坐标系统(几何意义))
- [8.2 数据库记录(关系意义)](#8.2 数据库记录(关系意义))
- [8.3 函数多返回值(计算意义)](#8.3 函数多返回值(计算意义))
- [9. 学术文献中的定义](#9. 学术文献中的定义)
- [10. 与类型理论的关系](#10. 与类型理论的关系)
- [11. 历史趣闻](#11. 历史趣闻)
- [12. 总结](#12. 总结)
"元组"名称的由来
"元组"这个名称来源于数学和计算机科学领域,下面详细解释它的起源和含义:
1. 词源学角度
"元组"是英文 "tuple" 的翻译:
- "tuple" 来自 "n-tuple",其中 "n" 表示元素的数量
- 后缀 "-tuple" 来源于拉丁语的 "-plus"(表示倍数)
- 数学中的 "tuple" 指代 有序的元素集合
- 中文翻译 "元组" 中:
- "元" 表示 元素(element)
- "组" 表示 组合 、集合
- 合起来就是 "元素的组合"
2. 数学中的起源
在数学中,元组的概念有明确的定义:
2.1 笛卡尔积(Cartesian Product)
数学
如果 A = {1, 2}, B = {3, 4}
那么 A × B = {(1,3), (1,4), (2,3), (2,4)}
这里的 (1,3), (1,4) 等就是二元组
2.2 n元组(n-tuple)
- 0元组 :空元组
() - 1元组 :单元素元组
(a) - 2元组 :有序对
(a, b)- 也叫 有序偶 或 序偶 - 3元组 :三重元组
(a, b, c) - n元组 :n个元素的有序序列
(a₁, a₂, ..., aₙ)
3. 数据库理论中的元组
在关系数据库中,"元组"有特定的含义:
sql
-- 数据库表的一行就是一个元组
SELECT * FROM employees;
-- 结果示例:
-- | id | name | age | department |
-- |----|-------|-----|------------|
-- | 1 | Alice | 30 | Sales | ← 这就是一个元组
-- | 2 | Bob | 25 | IT | ← 另一个元组
在数据库术语中:
- 关系(Relation) = 表(Table)
- 属性(Attribute) = 列(Column)
- 元组(Tuple) = 行(Row)
4. 编程语言中的演变
4.1 Lisp语言(1958年)
Lisp是最早使用类似元组概念的语言之一:
lisp
; Lisp中的列表可以包含不同类型
'(1 "hello" 3.14) ; 这是一个包含多种类型的列表
虽然Lisp叫"列表",但它实际上更接近元组的概念。
4.2 ML语言(1973年)
ML语言正式引入了元组类型:
sml
(* Standard ML中的元组 *)
val point = (10, 20) : int * int
val mixed = (1, "hello", 3.14) : int * string * real
这里的 * 表示类型乘积,形成了元组类型。
4.3 Python中的元组
Python继承了这一传统:
python
# Python 1.x (1994年) 就有元组
point = (10, 20) # 二元组
mixed = (1, "hello", 3.14) # 三元组
5. "元组" vs "列表" 的哲学差异
| 特性 | 元组 (Tuple) | 列表 (List) |
|---|---|---|
| 数学背景 | 来自n元组,强调结构 | 来自序列,强调集合 |
| 哲学含义 | 坐标 、记录 、关系 | 容器 、集合 、序列 |
| 典型用途 | 点的坐标、数据库记录、函数多返回值 | 数据集合、可变序列 |
| 类比 | 类似结构体(struct) | 类似数组(array) |
6. 命名对比:其他语言的叫法
不同编程语言对类似概念的命名:
| 语言 | 名称 | 含义 |
|---|---|---|
| Python | Tuple (元组) | 不可变的有序序列 |
| C++ | std::tuple |
固定大小的异构容器 |
| Haskell | Tuple | 固定长度的异构序列 |
| Scala | Tuple | 同C++/Haskell |
| Rust | Tuple | 固定大小的异构值集合 |
| Java | 没有内置,可用Pair、Triple等 |
通过库实现 |
| JavaScript | Array (但可包含不同类型) | 动态类型,实际上类似元组 |
| Swift | Tuple | 轻量级的数据分组 |
| Kotlin | Pair、Triple | 专门用于2个或3个元素 |
| Go | 没有内置,但可返回多个值 | 通过函数多返回值实现 |
7. 为什么不是其他名字?
为什么选择"元组"而不是其他名称?
-
不是"记录"(Record):
- 记录通常有关联的字段名
- 元组按位置访问,记录按名称访问
-
不是"结构体"(Struct):
- 结构体需要预定义类型
- 元组可以快速创建临时结构
-
不是"数组"(Array):
- 数组通常是同质的(相同类型)
- 元组是异质的(不同类型)
-
不是"序列"(Sequence):
- 序列强调顺序性
- 元组强调结构性(固定大小、不同类型)
8. 实际代码示例:体现"元组"本质
8.1 坐标系统(几何意义)
python
# 2D坐标点 - 典型的二元组
point_2d = (10, 20)
# 3D坐标点 - 三元组
point_3d = (10, 20, 30)
# RGB颜色 - 三元组
color_rgb = (255, 128, 0)
# 这些都是数学中的"点",在数学中用坐标表示
8.2 数据库记录(关系意义)
python
# 员工记录 - 四元组
employee = (1001, "Alice", "Engineer", 75000)
# 这对应关系数据库中的一行
# (员工ID, 姓名, 职位, 薪水)
8.3 函数多返回值(计算意义)
python
def divide(a, b):
quotient = a // b
remainder = a % b
return quotient, remainder # 返回二元组
result = divide(17, 5) # (3, 2)
# 这表示一个除法运算的完整结果
9. 学术文献中的定义
在计算机科学文献中,元组通常被定义为:
"一个有序的 、有限的元素序列,其中每个元素可以来自不同的类型域。"
关键特征:
- 有序性 :
(a, b) ≠ (b, a)(除非a = b) - 有限性:有固定数量的元素
- 异构性:元素类型可以不同
- 结构性:整体被视为一个复合值
10. 与类型理论的关系
在类型理论中,元组对应 乘积类型(Product Type):
- 二元组类型 :
T₁ × T₂ - 三元组类型 :
T₁ × T₂ × T₃ - n元组类型 :
T₁ × T₂ × ... × Tₙ
乘积类型的值就是元组。
11. 历史趣闻
-
"tuple"的发音:
- 英语中发音为 /ˈtuːpəl/ 或 /ˈtjuːpəl/
- 源自"quintuple"(五倍)、"sextuple"(六倍)等词的后缀
- "n-tuple"读作"en-tuple"
-
早期术语:
- 20世纪50年代:多使用"ordered pair"(有序对)
- 20世纪60年代:开始使用"tuple"作为通用术语
- 1970年代:在关系数据库理论中普及
-
中文翻译:
- 早期文献中曾译为"数组"(与array混淆)
- 后来统一为"元组",强调"元素组合"
- 台湾地区有时译为"组元"或"多元组"
12. 总结
"元组"这个名称体现了:
- 数学根源:来自n元组的概念
- 结构特性:固定大小的元素组合
- 有序性质:元素顺序重要
- 类型特征:支持不同类型组合
- 实用价值:轻量级的数据结构
所以,当你使用Python中的tuple或C++中的std::tuple时,你实际上在使用一个有着深厚数学和计算机科学背景的概念。这个名字准确地反映了它的本质:元素的组合(元 = 元素,组 = 组合)。