第二章 编程环境

 

用户可以在MMP的界面上输入各种数学元素,只要它隶属于系统能够识别与支持的数据类型。MMP还提供了一些高级指令,支持用户编写出具有特定功能的自定义程序。另外,MMP也具备最基本的输入与输出指令,使用户可以方便地读写文档,进而实现与其它应用软件的数据共享。本章将分别介绍以上三个方面的内容。

 

§2.1          基本数据类型

MMP能够识别与支持的数据类型有三十几种,以方便用户建立各种不同的数学对象。在MMP里可以用type()指令来查询某个输入对象的数据类型。限于篇幅,以下我们仅介绍几种常用的数据类型。括号中是相应的类型名。

 

变量(Variable):

MMP的变量可以由英文字母、数字或是下划线组成,它通常出现在MMP的赋值语句的左边。事实上,MMP变量的含义较广,包括许多种类型,其中用户经常遇到的是UNDEFINED类型和TFUNCTION类型。当变量未被赋值时就是UNDEFINED类型。MMP中的一些特殊函数,例如sin(x),cos(x),sqrt(x),curt(x)等也被看成是一类特殊的变量,这就是TFUNCTION类型的变量。需要注意的是,MMP在启动之后,系统内部将建立一个初始的系统变量表,对于所有与变量序有关的指令,除非特别指定,都将以系统变量表所给定的变量序作为默认的变量序。

 

表达式(Expression):

任何由操作数(operand)与运算符(operator)所组成的数学式都是表达式。操作数可以是数(整数,分数,复数)和变量(含特殊函数sincossqrt curt等),而运算符可以包括算术运算符(+ -  *  /  ^() ++  --),逻辑运算符(~<not> &&<and>  ||<or>),以及关系运算符(>  >= < <=  == !=)。例如:3*x^2+5*x+7,6+2*sin(x)+x*y^2*cos(x)+x/y等都是表达式类型。

 

多项式(RIPolyType):

多项式可以看成是一类特殊的表达式。需要注意的是对于上述表达式类型,系统会进行一些简单的计算,包括同类项的合并,简单的加减法等,但不会进行复杂的计算,也不会对表达式进行展开,如果需要作进一步的计算,就需要通过expand()指令对表达式进行展开,展开之后的表达式即成为多项式类型。当然,不是所有的表达式都能展开成为多项式,如果该表达式不属于多项式的范畴,展开后仍是表达式。例如:(x+1)^2是一个表达式,expand((x+1)^2) 则是一个多项式,而表达式x^y展开之后仍是表达式,不能把它所展开的结果当作多项式来处理,因此也就不能具备有关多项式的功能和操作。

 

数(BaseNumber):

MMP的数包括整数、分数、多精度浮点数,双精度浮点数和复数等类型。各种不同类型的数在MMP的用户界面上都被统一抽象地识别为同一种基本数类型。当遇到有关数的混合运算和比较时,系统会自动进行具体类型的判别,通过必要的类型转化之后再调用具体类型的相应操作。类型转化将遵循一定的优先级顺序进行,对于上述五种类型,目前系统所采用的优先级顺序是(按优先级从高到低排列):复数、双精度浮点数、多精度浮点数、分数和整数。

 

链表(ListType):

MMP的链表是指用方括号括起来的一组从逗号分隔的数学元素,这些数学元素可以是任何MMP能够识别的数据类型。链表类型支持多层嵌套,即链表元素可以又是一个链表,链表中的元素有先后次序性和重复性。许多MMP的指令都需要以链表为自变量来传递。注意链表的下标变量从1开始。

 

矩阵(MatrixType):

矩阵是线性代数的基本研究对象。MMP的矩阵类型是通过matrix()指令建立。矩阵中的元素可以是变量、数、多项式、表达式等任何MMP支持的基本数据类型的对象。MMP在线性代数领域的处理能力就体现在它所提供的各种有关矩阵的运算指令上。

 

MMP除了提供上述基本数据类型之外,还有字符串、向量等许多对于用户而言一般不太常用的数据类型,这里就不再一一介绍。在上述基本数据类型中,与数、多项式、链表和矩阵有关的运算指令还将在后面的章节中详细讨论。

 

 

§2.2          编程语言

1.赋值语句

MMP中形如lhs:=rhs或lhs=rhs的语句都是赋值语句,表示将右边的式子(rhs)赋给左边的式子(lhs),而左边的式子必须是个变量。

 

2. if语句

调用:

if(逻辑表达式)  命令序列

        [else 命令序列]

fi;

        或者

        if(逻辑表达式)  命令序列

        elif(逻辑表达式)  命令序列

        [[elif(逻辑表达式)  命令序列]

        else   命令序列]

        fi;

说明:

示例:

>i:=1;

>if(i>1) f:=2;

else f:=3;

fi;

>f;

3

 

3. while语句

调用:while(逻辑表达式) do

   命令序列

   od;

说明:

示例: 

>f:=0;  i:=0;

>while(i<10) do  f:=f+i; i=i+1; od;

>f;

45

 

4.for语句

调用:for 变量 from 1  to  2 [step 2] do

    命令序列

    od;

             或者

             for(assign_list; 逻辑表达式; assign_list) do

             命令序列

             od;

说明:

示例: 

>f:=0;

>for i from 1 to 10 do f:=f+i; od;

>f;

55

 

5.switch语句

调用:switch(表达式)

           default: 命令序列

   case 1:       命令序列

  

   case n:       命令序列

   end;

说明:

示例: 

>i:=1;

>switch(i)

case 1: f:=1; break;

case 2: f:=2; break;

default: f:=0;

end;

>f;

1

 

6. 特殊功能

1)        break;

2)        continue;

3)       return ; return(s);

 

7. 自定义过程

调用:变量 := proc(参数表)

   [global  全局参数表]

   [local   局部参数表]

   命令序列

            end;

说明:

示例:   

>f:=proc(i)

local g;

g:= i+1;

return(g);

end;

>f(2);

3

 

8. restart函数

调用:restart()

说明: 恢复系统的初始状态

示例: 

        >a:=10;

a:=10

>restart();

"The System has been RSTARTED"

>a;

a

 

§2.3          输入输出函数

1.         read

调用:read(filename)

参数:filename 是一个字符串

说明:将文件filename读入系统,该文件为文本文件。

示例:

>f:= (x+y)^7;

f:=(y+x)^7

>write(f,"a.txt");

>read("a.txt");

 

2.         write

调用:write(s,filename)

参数:s是一个变量名,filename 是一个字符串

说明:将变量s写入文件filename

示例:

>f:= (x+y)^7;

f:=(y+x)^7

>write(f,"a.txt");

 

3.         print

调用:print(s)

参数:s是一个变量名

说明:将变量s的内容打印到屏幕

示例:

>f:=1;

>print(f);