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表达式简介 [目录]
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) |
FORCAL表达式中可以包含字符串,两个双引号之间的所有字符表示一个字符串,例如:"...这是一个字符串!..."。
FORCAL把字符串解释为一个整数,这个整数表示字符串的地址,FORCAL中的函数可以通过这个地址操作字符串。例如,以下函数输出一个字符串:
str["...这是一个字符串!..."]
FORCAL表达式可以带有零个或多个参数。格式如下:
"f"(x,y,z)=x+y-z+1
字符串"f"表示表达式的名称,该表达式有三个自变量x,y,z,自变量由英文字母a...z、A...Z、下划线_和数字0...9组成,但第一个字符不能为数字,自变量个数可以为零。
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; //实数无参表达式,只编译,不执行。
关于有参数的表达式的用途,请参考“用表达式作为函数的参数”部分的说明。
在这部分内容中,只介绍OpenFC特有的界面特性,对于象“打开”文件、“关闭”文件等一般性的操作,本文不予介绍。
OpenFC采用水平分隔窗口,上面的窗口用于输入源代码,下面的窗口输出计算结果。
可以用鼠标操作两个窗口之间的分隔条调整窗口的相对大小。
执行菜单“设置”中的“恢复窗口”选项可以恢复窗口的初始大小。
3.2.1 “计算”选项
编译并执行源代码窗口中的源程序。
3.2.2 “同步计算”选项
当源代码窗口中的内容有变化时,自动编译并执行源代码窗口中的源程序。
当选择了该选项时,该选项将变为“取消同步计算”。
为了使用方便,通常在源程序的开头使用清除输出窗口函数:clear();
3.2.3 “编译”选项
编译源代码窗口中的源程序。
3.2.4 “同步编译”选项
当源代码窗口中的内容有变化时,自动编译源代码窗口中的源程序。
当选择了该选项时,该选项将变为“取消同步编译”。
3.2.5 “执行”选项
执行当前(最近)编译的源代码。
3.2.6 “计算剪贴板中文本”选项
编译并执行剪贴板中的(源程序)文本。
3.2.7 “计算选中文本”选项
编译并执行源代码窗口中被选中的(源程序)文本。
该菜单中除第一个选项外,其余均为弹出式子菜单,可以执行弹出式子菜单中的命令选项。
所有弹出式子菜单均对应着一个已经加载的命令文件,命令文件中定义了选中命令选项时所执行的操作。命令文件实际上是一个动态库说明文件。以#COMMAND:开头的动态库说明文件将作为一个弹出式子菜单添加到“命令”菜单中,文件格式如下:
#COMMAND:该行内容将作为子菜单被添加到“命令”菜单
<命令1
//以下表达式被作为命令1被执行;
1+2;
str["命令1执行完毕!"];
>
<命令2
//以下表达式被作为命令2被执行;
2+3;
str["命令2执行完毕!"];
>
关于动态库说明文件,请参考“OpenFC功能扩展及说明文件”。
通常不需要执行“命令”菜单的第一个选项“重载所有命令”。
3.4.1 “函数查询”选项
执行该命令将弹出“OpenFC
函数查询”窗口。通过该窗口可以查询到所有已经加载的动态库说明文件的内容。通常,在动态库说明文件中有动态库函数说明、常量定义、命令文件等。
关于动态库说明文件,请参考“ OpenFC功能扩展及说明文件”。
3.5.1 “OpenFC 基本设置”选项
执行该命令将弹出“OpenFC
基本设置”窗口。
在进行设置时,可以将需要加载的扩展动态库的名字(通常包含文件路径)添加到“加载动态库列表”中,如果有多个需要加载的动态库,则动态库名字之间用空格、Tab字符或者换行符进行分隔。OpenFC不加载以星号*开头的动态库,因此,如果您暂时不想加载某个动态库,可以在该动态库文件名的最前面加上一个星号;OpenFC也不加载在<...>中的动态库(字符“<”应在某个文件名的开头),因此您可以使用<...>注释掉一批动态库文件。
在加载动态库说明文件时,需要将动态库说明文件的名字(通常包含文件路径)添加到“动态库说明文件列表”中,如果有多个需要加载的动态库说明文件,则文件名之间用空格、Tab字符或者换行符进行分隔。OpenFC不加载以星号*开头的说明文件,因此,如果您暂时不想加载某个说明文件,可以在该文件名的最前面加上一个星号;OpenFC也不加载在<...>中的说明文件(字符“<”应在某个文件名的开头),因此您可以使用<...>注释掉一批说明文件。
3.5.2 “恢复窗口”选项
执行该命令时将恢复源代码和结果输出窗口的初始大小。
|
加速键 |
命令 |
加速键 |
命令 |
|
| 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#...": 引用复数类型的表达式,“...”为表达式名称。
常量是指那些不需要程序计算的固定值。如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);
有三种给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 函数查询”窗口可以直接查询到。
[目录]