OpenFC V2.05 使用说明

目  录

1 Forcal表达式简介
 1.1 三种表达式
 1.2 含有字符串的表达式
 1.3 带参数的表达式
2 OpenFC源程序
 2.1 OpenFC源程序的格式
 2.2 OpenFC程序的执行
3 OpenFC界面
 3.1 窗口
 3.2 “计算”菜单
 3.3 “命令”菜单
 3.4 “函数”菜单
 3.5 “设置”菜单
 3.6 加速键一览表
4 Forcal函数简介
5 用表达式作为函数的参数
6 使用符号常量
7 OpenFC功能扩展及说明文件
8 在OpenFC启动时运行程序
9 OpenFC中的函数
10 其他函数

1 Forcal表达式简介  [目录]

1.1 三种表达式  [目录]

    Forcal.dll是OpenFC最底层的支持库,因此需要先了解FORCAL表达式。
    FORCAL表达式有实数表达式、复数表达式和整数表达式三种。举例如下:
    (1)实数表达式:2.3+sin[0.56]
    (2)复数表达式:2.3-i+cos[1.2+2.3i]
    (3)整数表达式:22+3*6/2
    说明:(1)若整数表达式中有实数,在编译时将全部转化为整数,同时在进行乘方运算以及函数运算时,将把整数转化为双精度实数后进行运算,最后再把运算结果转化为整数。(2)在复数表达式中用i表示虚数。
    FORCAL表达式中的函数分为一级函数和二级函数,其中一级函数较为常用,为单变量函数,运算速度较快,而二级函数功能较为丰富,非常容易扩充(通常通过扩展动态库进行扩充)。
    FORCAL表达式中的一级函数见下表:

函数类型 实数表达式 整数表达式 复数表达式 说明
正弦函数 sin(x) sin(x)    
余弦函数 cos(x) cos(x)    
正切函数 tan(x)      
反正弦函数 asin(x)      
反余弦函数 acos(x)      
反正切函数 atan(x)      
平方根函数 sqrt(x) sqrt(x) sqrt(x)  
指数函数 exp(x) exp(x) exp(x)  
自然对数函数 ln(x) ln(x) ln(x)  
常用对数函数 lg(x) lg(x) lg(x)  
双曲正弦函数 sinh(x)     [exp(x)-exp(-x)]/2
双曲余弦函数 cosh(x)     [exp(x)+exp(-x)]/2
双曲正切函数 tanh(x)     [exp(x)-exp(-x)]/[exp(x)+exp(-x)]
取整函数 int(x)   int(x) 截去x的小数部分
绝对值函数 abs(x) abs(x) abs(x)  
重置自变量函数 mov(x) mov(x) mov(x) 功能复杂!
共轭函数     con(x)  
实部虚部交换函数     xy(x)  
实部为0函数     x0(x)  
虚部为0函数     y0(x)  

1.2 含有字符串的表达式  [目录]

    FORCAL表达式中可以包含字符串,两个双引号之间的所有字符表示一个字符串,例如:"...这是一个字符串!..."。
    FORCAL把字符串解释为一个整数,这个整数表示字符串的地址,FORCAL中的函数可以通过这个地址操作字符串。例如,以下函数输出一个字符串:
    str["...这是一个字符串!..."]

1.3 带参数的表达式  [目录]

    FORCAL表达式可以带有零个或多个参数。格式如下:
    "f"(x,y,z)=x+y-z+1
    字符串"f"表示表达式的名称,该表达式有三个自变量x,y,z,自变量由英文字母a...z、A...Z、下划线_和数字0...9组成,但第一个字符不能为数字,自变量个数可以为零。

2 OpenFC源程序  [目录]

2.1 OpenFC源程序的格式  [目录]

    在OpenFC源文件中,可以有多个FORCAL表达式,表达式之间用分号“;”隔开。
    由于FORCAL数学表达式有三种,即整数表达式、实数表达式和复数表达式。为便于区分,OpenFC将以i:开头的表达式作为整数表达式,以c:开头的表达式作为复数表达式,其余为实数表达式。
    同时,在源文件中可以进行注释,注释方法与C++语言相似,即:每行两个//后的内容为注释内容;在一行内或者多行之间/*...*/之间的内容为注释内容。注释不是源程序的有效部分,但可以使程序更易读。

    举例如下:

    //这是一个例子!
    i:2.2+3.3;
//以i:开头是整数表达式; 
    c:2.3-sin(2.2+3.3i);
//以c:开头是复数表达式;
    2.2+3.3;
//这是实数表达式。
   
/* 从这里开始,连续几行注释:
    333+222;
    . . . . . . ;
    555-222;
    */

    "f"(x)=x+66;
//这是个有参数的表达式,只编译,不执行。"f"为表达式名称。
    calfor[#"f",11];
//calfor[]函数执行了 "f" 表达式。

2.2 OpenFC程序的执行  [目录]

    由于表达式有些带有参数,有些不带参数,OpenFC在进行处理时,对于有参数的表达式只进行编译,不进行计算。
OpenFC只顺序执行不带参数的表达式。
    但是,如果表达式以冒号“ : ”开头,则无论是有参表达式还是无参表达式,都是只编译,不执行,格式如下:

    i:: 2+3; //整数无参表达式,只编译,不执行;
    i:: "f1" ()=2+3;
//整数无参表达式,只编译,不执行;
    c:: 2+3i;
//复数无参表达式,只编译,不执行;
    c:: "f2" ()=2+3i;
//复数无参表达式,只编译,不执行;

    : 2+3;
//实数无参表达式,只编译,不执行;
    : "f3" ()=2+3;
//实数无参表达式,只编译,不执行。

   
关于有参数的表达式的用途,请参考“用表达式作为函数的参数”部分的说明。

3 OpenFC界面  [目录]

    在这部分内容中,只介绍OpenFC特有的界面特性,对于象“打开”文件、“关闭”文件等一般性的操作,本文不予介绍。

3.1 窗口  [目录]

    OpenFC采用水平分隔窗口,上面的窗口用于输入源代码,下面的窗口输出计算结果。
    可以用鼠标操作两个窗口之间的分隔条调整窗口的相对大小。
    执行菜单“设置”中的“恢复窗口”选项可以恢复窗口的初始大小。

3.2 “计算”菜单  [目录]

3.2.1 “计算”选项

    编译并执行源代码窗口中的源程序。

3.2.2 “同步计算”选项

    当源代码窗口中的内容有变化时,自动编译并执行源代码窗口中的源程序。
    当选择了该选项时,该选项将变为“取消同步计算”。
    为了使用方便,通常在源程序的开头使用清除输出窗口函数:clear();

3.2.3 “编译”选项

    编译源代码窗口中的源程序。

3.2.4 “同步编译”选项

    当源代码窗口中的内容有变化时,自动编译源代码窗口中的源程序。
    当选择了该选项时,该选项将变为“取消同步编译”。

3.2.5 “执行”选项

    执行当前(最近)编译的源代码。

3.2.6 “计算剪贴板中文本”选项

    编译并执行剪贴板中的(源程序)文本。

3.2.7 “计算选中文本”选项

    编译并执行源代码窗口中被选中的(源程序)文本。

3.3 “命令”菜单  [目录]

    该菜单中除第一个选项外,其余均为弹出式子菜单,可以执行弹出式子菜单中的命令选项。
    所有弹出式子菜单均对应着一个已经加载的命令文件,命令文件中定义了选中命令选项时所执行的操作。命令文件实际上是一个动态库说明文件。以#COMMAND:开头的动态库说明文件将作为一个弹出式子菜单添加到
“命令”菜单中,文件格式如下:

    #COMMAND:该行内容将作为子菜单被添加到“命令”菜单

    <命令1
    
//以下表达式被作为命令1被执行;
     1+2;
     str["命令1执行完毕!"];
    >

    <命令2
    
//以下表达式被作为命令2被执行;
     2+3;
     str["命令2执行完毕!"];
    >

    关于动态库说明文件,请参考“OpenFC功能扩展及说明文件”。

    通常不需要执行
“命令”菜单的第一个选项“重载所有命令”。

3.4 “函数”菜单  [目录]

3.4.1 “函数查询”选项

    执行该命令将弹出“OpenFC 函数查询”窗口。通过该窗口可以查询到所有已经加载的动态库说明文件的内容。通常,在动态库说明文件中有动态库函数说明、常量定义、命令文件等。
    关于动态库说明文件,请参考“ OpenFC功能扩展及说明文件”。

3.5 “设置”菜单  [目录]

3.5.1 “OpenFC 基本设置”选项

    执行该命令将弹出“OpenFC 基本设置”窗口。
    在进行设置时,可以将需要加载的扩展动态库的名字(通常包含文件路径)添加到“加载动态库列表”中,如果有多个需要加载的动态库,则动态库名字之间用空格、Tab字符或者换行符进行分隔。OpenFC不加载以星号*开头的动态库,因此,如果您暂时不想加载某个动态库,可以在该动态库文件名的最前面加上一个星号;OpenFC也不加载在<...>中的动态库(字符“<”应在某个文件名的开头),因此您可以使用<...>注释掉一批动态库文件。
    在加载动态库说明文件时,需要将动态库说明文件的名字(通常包含文件路径)添加到“动态库说明文件列表”中,如果有多个需要加载的动态库说明文件,则文件名之间用空格、Tab字符或者换行符进行分隔。OpenFC不加载以星号*开头的说明文件,因此,如果您暂时不想加载某个说明文件,可以在该文件名的最前面加上一个星号;OpenFC也不加载在<...>中的说明文件(字符“<”应在某个文件名的开头),因此您可以使用<...>注释掉一批说明文件。

3.5.2 “恢复窗口”选项

    执行该命令时将恢复源代码和结果输出窗口的初始大小。

3.6 加速键一览表  [目录]

加速键

命令

 

加速键

命令

Ctrl+N 新建文件 F1 帮助
Ctrl+O 打开文件 F5 编译并执行源代码窗口中被选中的文本
Ctrl+S 保存文件 F6 编译并执行剪贴板中的文本
Ctrl+Z 撤消最后一次编辑操作 F7 执行当前(最近)编译的源代码
Ctrl+X 剪切 F8 编译并执行源代码窗口中的源程序
Ctrl+C 复制 F9 函数查询
Ctrl+V 粘贴 F10 恢复窗口
Ctrl+D 删除    
Ctrl+A 选中全部文本    
Ctrl+F 查找替换字符串    

4 Forcal函数简介  [目录]

    FORCAL中的一级函数虽然运算速度较快,但数量较少,FORCAL依靠动态地扩充二级函数(通常通过扩展动态库进行扩充)来增加它的功能。函数格式如下:
        函数名(自变量1,自变量2,... ...)
    函数可以有多个自变量也可以没有自变量,不过即使没有自变量,在使用它们时,函数名后面的括号也不能省略。
    使用一个函数,最重要的是要搞清楚它的自变量和返回值的意义。函数的自变量可以是一个数,也可以是一个字符串、表达式名称(序号)、数组或者表示其他的意义,具体要查看该函数的相关说明。
    一般地,如果您错误地使用了函数的自变量,将会导致一个程序运行时的错误说明。

5 用表达式作为函数的参数  [目录]

    给表达式起一个名字是为了在另一个地方能够使用它,OpenFC 用下面的方式给表达式定义一个名称:

    "f1"(x)=x+1;

    在FORCAL中规定:每个表达式中第一个字符串可以作为该表达式的名称。因此,上面这个表达式的名称即为 f1 ,它在FORCAL内部表示了该种类型表达式的一个序号。
    FORCAL中的有些函数需要用表达式的序号作参数,这时,我们可以用#"..."引用一个已经定义的表达式。 例如:

    "f1"(x)=x+1; //只编译,不执行;
    calfor(#"f1",2); //编译执行。

    表达式 f1 是有参表达式,只编译,不执行。函数calfor[]执行了表达式 f1,并传递给它一个参数2。
    需要注意的是,#"..."只能引用与所在表达式相同类型的表达式,如果要引用不同类型的表达式,需要使用如下形式:
    #"#...": 引用任意类型的表达式,“...”为表达式名称;
    #"i#...": 引用整数类型的表达式,“...”为表达式名称; 
    #"r#...": 引用实数类型的表达式,“...”为表达式名称;
    #"c#...": 引用复数类型的表达式,“...”为表达式名称。

6 使用符号常量  [目录]

    常量是指那些不需要程序计算的固定值。如100就是一个常量。在OpenFC中可以用符号表示一个常量,符号名由英文字母a...z、A...Z、下划线_和数字0...9组成,但第一个字符不能为数字。目前只能使用实型常量,实型常量用const: 定义,例如:

    const: pi=3.14, _e_=2.718, eps=1e-10; //定义了三个常量;
    const: pi2=2*pi, pi_e=pi-_e_; //在常量定义中可以使用常数表达式;
    pi; pi2; eps; //输出常量的值;

    在常量定义时,等号前为常量的符号名,等号后为任意合法的不包含字符串的常数表达式,在常数表达式中可以使用以前定义的常量,但不能使用同一常量定义语句中的常量。
    除了可以使用自定义的常量以外,还可以使用自动常量。所谓自动常量就是由OpenFC自动给符号名分配一个常数值。实型自动常量用autoconst: 定义,例如:

    autoconst: a0,a1,a2,a3,a4,a5; //定义了6个自动常量;
    autoconst: b0,b1,b2,b3,b4,b5; //定义了6个自动常量;
    a0;a1;a2;a3;a4;a5; //输出自动常量的值;
    b0;b1;b2;b3;b4;b5; //输出自动常量的值;

    OpenFC给用autoconst: 定义的常量按其先后顺序自动分配一个从0开始的自然数。把自动常量的符号名放在一个autoconst: 语句中和放在若干autoconst: 语句中是完全一样的。
    如果用autoconst:: 定义自动常量,则每次OpenFC都会给该语句中的符号名分配一个从0开始的自然数,称局部自动常量。例如:

    autoconst::d1,d2,d3; //定义了3个局部自动常量;
    autoconst::f1,f2,f3; //定义了3个局部自动常量;
    d1;d2;d3; //输出局部自动常量的值;
    f1;f2;f3; //输出局部自动常量的值;

    另外,也可以在动态库说明文件中进行常量定义,请参考“OpenFC功能扩展及说明文件”。
    最后指出,如果符号常量名与表达式的自变量重名,则该符号常量被忽略。

7 OpenFC功能扩展及说明文件  [目录]

    OpenFC通过加载OpenForcal扩展动态库进行功能扩展。在“OpenFC 基本设置”中可以加载OpenForcal扩展动态库。
    OpenForcal扩展动态库中的函数说明在动态库说明文件中。动态库说明文件也在“OpenFC 基本设置”中进行加载。
    动态库函数说明文件为文本文件,格式如下:

    example.txt

    #example.dll:这是一个动态库扩展的例子
    <add: 计算两个数的和
    add(a,b): 计算两个数的和
    ... ...
    >
    <sub: 计算两个数的差
    sub(a,b): 计算两个数的差
    ... ...
    >

    该文件中第一个以#开头的行进行动态库功能的描述,该行将出现在“函数查询”窗口的“动态库”列表中。
    每一个动态库函数的说明都放在一对尖括号<...>内,“<”和“>”必须是行首字符。在“<”后同一行的内容将出现在“函数查询”窗口的“动态库函数”列表中,其余内容将出现在“函数说明”编辑框内。
    为方便使用,需要将该说明文件的简介以函数说明的方式添加到OpenFChlp.ini文件中,OpenFC将自动加载OpenFChlp.ini文件。说明文件的简介格式如下:

    <example.txt : 一个动态库扩展的例子的说明文件
    example.dll:这是一个动态库扩展的例子
    >

    注意example.txt为该文件的名字(包含文件路径)。

    在动态库函数说明文件中可以进行常量定义,不过在等号后的常数表达式中不能使用以前定义的常量。格式如下:

    <const: 定义一些常量,行首字符必须为const:
    pi=3.14, _e_=2.718, eps=1e-10
    >

    在动态库函数说明文件中不能定义自动常量。
    关于常量的说明,请参考“使用符号常量”。

8 在OpenFC启动时运行程序  [目录]

    OpenFC在启动时,将自动编译执行动态库函数说明文件中所有以AUTOEXE.FC命名的函数说明,例如以下说明:

    <AUTOEXE.FC
     settalk[-1];
     SetPath[""];
     SetPath["fc"];
    >

9 OpenFC中的函数  [目录]

    OpenFC中仅定义了以下几个函数:

8.1 清除输出窗口的内容(实数函数):clear[];
8.2 字符串输出函数(实数函数):str["aaaa"];
    该函数可能返回如下运行错误:1、指定的字符串不存在。
8.3 换行函数(实数函数):endl[];
8.4 数值输出函数:out[x];
    该函数输出一个数值并返回该值。可以用流程控制该函数进行数值输出。
8.5 将一个实数数组的值输出到窗口(实数函数):outarray(i);
8.6 设置工作目录函数(实数函数):SetPath("c:\\My Documents");
    注意字符串中两个反斜杠\\被解释为一个反斜杠\,如上例。
    函数SetPath("")将目录设置为
OpenFC.exe所在目录。
    该函数可能返回如下运行错误:1、指定的字符串不存在。
8.7 执行外部程序函数(实数函数):ShellExecute("lpOperation","lpFile","lpParameters","lpDirectory",nShowCmd);
    lpOperation:指定本命令所要执行的动作;
    lpFile:指定本命令所要操作的文件;
    lpParameters:指定操作文件时所使用的参数;
    lpDirectory:指定本命令所使用的缺省路径;
    nShowCmd:显示方式。
    该函数可能返回如下运行错误:1、指定的字符串不存在。
    例子:
    打开一个应用程序:ShellExecute("open","calc.exe","","",0);
    打开一个网页:ShellExecute("open","http://forcal.yeah.net","","",0);
    用系统打印机打印文档:ShellExecute("print","openfc.ini","","",0);
    查找文件:ShellExecute("find","","","",0);

10 其他函数  [目录]

   有三种给OpenFC提供函数的方式:

9.1 Forcal中的函数

    Forcal.dll是OpenFC最底层的支持库,该库中提供了全部一级函数和部分重要的二级函数,这些函数可在“Forcal使用说明”中查询到。

9.2 OpenForcal中的函数

   OpenForcal.dll是OpenFC直接加载的支持库,在OpenForcal.dll中又加载了Forcal.dll。OpenForcal中定义的二级函数在“OpenForcal的用户界面”中可以查询到。

9.3 OpenForcal扩展动态库中的函数

    在OpenForcal扩展动态库中定义的二级函数可通过该动态库的说明文件查询到。如果OpenFC加载了这些说明文件,则通过“OpenFC 函数查询”窗口可以直接查询到。

[目录]