程序抽象:函数过程、适当过程与参数机制
发布时间: 2025-08-17 01:20:55 阅读量: 1 订阅数: 4 

### 程序抽象:函数过程、适当过程与参数机制
#### 1. 函数过程与适当过程
在编程世界中,函数过程和适当过程是两个重要的概念。
##### 1.1 函数过程
函数过程通常在函数定义中构建,多数编程语言也仅支持这种构建方式。不过,像 ML 和 HASKELL 这类函数式语言,将函数构建和绑定的概念区分开来。例如在 HASKELL 里,`\(I: T) -> E` 这样的表达式就能产生一个函数过程,其中 `I` 是形式参数(类型为 `T`),`E` 是函数体。
下面是一个 HASKELL 函数构建的例子:
```haskell
-- 产生一个实现立方函数的函数
\(x: Float) -> x^3
-- 传统函数定义
cube (x: Float) = x^3
-- 实际上是下面值定义的缩写
cube = \((x: Float) -> x^3)
```
对于积分函数 `integral (a: Float, b: Float, f: Float->Float) = ...`,它用于计算 `f(x)` 在区间 `[a..b]` 上的定积分。调用 `integral` 时,对应 `f` 的实际参数可以是任何类型为 `Float->Float` 的表达式,比如:
```haskell
... integral(0.0, 1.0, cube) ...
... integral(0.0, 1.0, \(x:Float)->x*x) ...
```
##### 1.2 适当过程
适当过程体现了要执行的命令,调用时会更新变量。应用程序员关注的只是这些变量的更新结果,而不关心具体的实现步骤。
- **C 或 C++ 适当过程定义**:形式为 `void I (FPD1, ..., FPDn) B`,其中 `I` 是函数标识符,`FPDi` 是形式参数声明,`B` 是过程体(块命令)。通过 `I(AP1, ..., APn);` 形式的命令调用过程,调用时会执行 `B`。例如下面的 C++ 排序过程:
```cpp
// 选择排序实现
void sort (int a[], int l, int r) {
int minpos;
int min;
for (int i = l; i < r; i++) {
minpos = i;
min = a[minpos];
for (int j = i+1; j <= r; j++) {
if (a[j] < a[i]) {
minpos = j;
min = a[minpos];
}
if (minpos != i) {
a[minpos] = a[i];
a[i] = min;
}
}
}
}
// 快速排序实现
void sort (int a[], int l, int r) {
int p;
if (r > l) {
partition(a, l, r, p);
sort(a, l, p-1);
sort(a, p+1, r);
}
}
```
应用程序员只关心调用 `sort(nums, 0, n-1);` 能将 `nums` 数组中的元素按升序排序,而实现者则关注具体使用的排序算法。
- **ADA 适当过程定义**:形式为 `procedure I (FPD1; ...; FPDn) is D begin C end;`,过程体由局部声明 `D` 和顺序命令 `C` 组成。例如下面的 ADA 排序过程:
```ada
procedure sort (a: in out Int_Array;
l, r: in Integer) is
p: Integer;
begin
if r > l then
partition(a, l, r, p);
sort(a, l, p-1);
sort(a, p+1, r);
end if;
end;
```
一般来说,调用过程可以从两个不同的角度理解:
- **应用程序员视角**:关注过程调用的最终结果,即某些变量的更新情况。
- **实现者视角**:关注过程体的执行,以及使用形式参数访问相应参数的方式。
##### 1.3 抽象原则
抽象原则指出,只要某个语法类别中的构造指定了某种计算,就可以设计出对该语法类别进行抽象的过程。
- **函数过程抽象**:函数过程对表达式进行抽象,函数体是一个表达式(至少在效果上是),函数调用是一个表达式,通过计算函数过程的体来产生结果。
- **适当过程抽象**:适当过程对命令进行抽象,过程体是一个命令,过程调用是一个命令,通过执行适当过程的体来更新变量。
基于此,还存在选择器过程,它对变量访问进行抽象。选择器过程的体是一个变量访问(实际上),选择器调用是一个变量访问,通过计算选择器过程的体来产生一个变量。选择器过程在编程语言中并不常见,但 C++ 支持。
下面是一个 C++ 选择器过程的例子:
```cpp
```
0
0
相关推荐










