# 2.5具有通用操作的系统

> 译者： [https://sicp.comp.nus.edu.sg/chapters/43](https://sicp.comp.nus.edu.sg/chapters/43)



在上一节中，我们看到了如何设计可以以多种方式表示数据对象的系统。 关键思想是通过通用接口函数将指定数据操作的代码链接到多个表示形式。 现在，我们将看到如何使用相同的思想，不仅定义在不同表示形式上通用的操作，而且还定义在不同种类的参数上通用的操作。 我们已经看到了几种不同的算术运算包：内置在我们语言中的原始算术（`+`，`-`，`*`，`/`），有理数算术（`add_rat`，`sub_rat`， [2.1.1节`mul_rat`，`div_rat`），以及我们在](25)[2.4.3节](42)中实现的复数算法 。 现在，我们将使用数据导向技术来构建算术运算的程序包，其中包含我们已经构建的所有算术程序包。

图 [2.23](43#fig_2.23)数字，&lt;/quote&gt;的人的角度来看，有一个功能`add`可以对提供的任何数字进行操作。 函数`add`是通用接口的一部分，该接口允许使用数字的程序统一访问单独的普通算术，有理算术和复数算术包。 任何单独的算术程序包（例如复杂程序包）本身都可以通过通用函数（例如`add_complex`）访问，这些通用函数组合了针对不同表示形式（例如矩形和极坐标）而设计的程序包。 此外，系统的结构是可加的，因此可以分别设计各个算术软件包并将其组合以生成一个通用算术系统。

<figure>![](img/4a6e2d72aa7ec2787fc0fb5eb4aa2c05.jpg)**[图2.23](43#fig_2.23)** 通用算术系统。</figure>

