篇三:多项式
class(类)在自然语言与编程语言中的表达
先看例子,你有一个苹果,你怎么去描述它呢?假设苹果有大小,颜色,位置。我们先看编程语言中如何表达:
class Apple{
public:
int color=0;
double volume=10;
double site=0;
}
//...
int main(){
Apple a;
a.color ;
a.volume ;
a.site ;
}
从上面的代码可以看到,在Apple类中,有三个属性分别表示了苹果的大小,颜色和位置。在下方main函数中,使用了它们,分别是 a.color
,a.volume
,a.site
。可以看出的是“
.
.
. ”将这三个序列从一个序列各自分成连个序列,一个属性,一个对象标识,说明它们是有结构的。
接下来我们看看自然语言对例子中苹果的描述:
-
苹果
- 颜色
- 大小
- 位置
在使用中,我们是这样描述的:苹果的颜色,苹果的大小,苹果的位置
可以看到,“的” 字将苹果与它的属性连接了起来。
接着,我们让“苹果”发生变化,看下面代码:
class Apple{
public:
int color = 0;
double volume = 10;
double site = 0;
public:
change_color(int color);
change_volume(double volume);
change_site(double site);
}
上面的代码中,我们在Apple类里面声明了三个成员函数,分别改变三个成员变量。根据上述代码,我们可以画出关系图,如下:
从中我们可以看出,是一个一对多映射关系的树形结构。我们再来看自然语言的描述,苹果移动了一下,苹果放黄了,苹果被吃了一口,我们也画出一个关系图,如下:
现在,我们用另一种描述方式:苹果发生了变化,*苹果的颜色(位置、大小)发生了变化。还是画出一个关系图,如下:
从上面的关系图我们不难发现,苹果被描述或者标识成四个属性,在上一个关系图中需要三个动词的描述我们将之转化为一个动词。若我们用 a , s , c , v a,s,c,v a,s,c,v 分别标识关系图中四个属性,再用 f f f 标识 发生, y y y 标识 变化 ,那么我们可以表示为下面的关系:
这个关系图是不是接近数学上函数的定义,多对一的映射关系。由此,我们可以总结,不管是自然语言,还是编程语言对一个苹果进行精确的描述时,都会分离属性,搭配相应的动词与函数,将一对多的关系转化到一对一。到最后一个关系图时,已经将多对一转化到多对一,当到这一步时,我们已经能用数学中的函数工具进行问题处理了,在计算机代码中,到这一步就是在具体函数中对类应用了。
在此转化过程中,编程语言(以C++为例)采用 . :: 等符号分离,自然语言则采用 的 进行分离。由此,我们引申出一个概念,多项式。
多项式
先看一下数学意义上的多项式:
a
2
+
2
a
b
+
b
2
a^2+2ab+b^2
a2+2ab+b2 我们都知道这个多项式,是和平方公式,公式中有加法,乘法,平方三个运算。如果详细展开这个公式,那么如下:
a
×
a
+
2
×
a
×
b
+
b
×
b
a\times a + 2\times a\times b + b\times b
a×a+2×a×b+b×b
从上面公式我们知道,
×
\times
×,
+
+
+它们在数学公式中或许有多种意义,但是不会变,而
a
,
b
a,b
a,b 作为代数项,它们是可以变的,把它们组合到一起,就是多项式。
引用数学概念上的多项式,定义:由多个不变的符号,以及可变的标识所组成的序列称为多项式或描述多项式
根据定义,我们可以称 苹果的位置,Apple.volume
是多项式。
回到上面公式,我们知道,确定公式各项的值,就能确定多项式的值。同样,**…的…**左右两侧的项能够确定值,那么就能确定这个多项式描述的是什么了。对于其中的 值,定义:对于一个描述多项式,其各项的值称为语义。
下一篇我们将讨论语义,也就是我们第一篇的切入点,也是关于中文编译的设想系列的核心内容。