logo资料库

fish语言说明书.pdf

第1页 / 共27页
第2页 / 共27页
第3页 / 共27页
第4页 / 共27页
第5页 / 共27页
第6页 / 共27页
第7页 / 共27页
第8页 / 共27页
资料共27页,剩余部分请下载后查看
FLAC3D 玩家宝典之 FISH 卷 作者 Sunshie (QQ 6192525) 卷首语 要学好 FLAC3D,必须学好 FISH,FISH 身为 FLAC3D 的内嵌语言,也就是是一种 嵌入式编程语言,其编写短小精干实时,同时兼顾大家操作习惯,不但可以嵌入命令流 文件里工作,而且还可以引用 FLAC3D 本身的任何命令,突破了一般标准程序代码的限 制,实现了读者对 FLAC3D 软件的完美控制。 类似于 ANSYS 的 APDL 语言,FISH 主要是用来处理现有命令程序难以实现(较难或 较烦)的一些问题,对于没有编程经验的用户,可以编一些简单的 FISH 函数,最好是 修改 3DSHOP 中的一些比较现成的函数以便使用;当然,既然是一门编程语言,也可以 编复杂程序。 写这一卷的主要目的就是使大家对 FISH 有个较为充分的认识和理解,因为相关资 料甚少,故卷中的有些资料是作者在 Simwe,Yantubbs 等论坛上收集后整理所得,在此表 示感谢。本卷分为 4 章,第一章为关于 FISH 语言法则、变量、函数等得一个综述,主 要是想让大家从全局认识 FISH 编程语言;第二章介绍了 FISH 语句的类别和各自特点 和用法;第三章则较为细致的向大家介绍了各变量,函数的具体含义,部分配合了用法 实例;第四章补充了一些比较不错的 FISH 应用实例。 希望大家读后会有所收获,也欢迎大家批评指正,共同提高! Sunshine ssw1216@163.com QQ 6192525 2007-9-20 于铁道科学研究院 北京·中国 1
FLAC3D 玩家宝典之 FISH 卷 作者 Sunshie (QQ 6192525) 第一章 Fish 的语言法则 一、四个概念 函数与变量—Fish 函数由 define 定义,end 结束定义。如下例为定义一个名叫 abc 的函数。 上述函数中 hh 即为“变量”。函数和变量是 FISH 语言中非常基本和重要的两个对 象,区别如下: 当我们调用一个 FISH 对象 XXX 时,如果 XXX 是函数,系统就会执行该函数;而如 果 XXX 不是函数而是变量,系统则会简简单单的调用其当前置。大家注意继续输以下命 令行,注意输出结果,便可对这两个有个较为清晰的认识。 语句—在不少实际问题中有许多具有指示说明性的、控制性的、重复性操作,程序 中需要执行他们,诸如 Array, Define, end, Case, endcase, If ,else, endif 等即为语句。我们 举例来说明选择语句 if..else 的用法,如下: 昨天晚上俺和俺老婆在床上就商量,我俩掰腕子,我赢了我老婆亲我一下,我老婆 赢了,我亲我老婆一下。 这个就是选择语句,如果(if)我赢了(表达式)我老婆亲我一下(语句 1),如 果我输了(else),我亲我老婆一下(语句 2)。 代码行—FISH 语言中的代码行,含义类似于命令流中的“命令行”。只是他们的写 法规则有很大的不同,如下节所述。 二、两个法则 1.FISH 语言中的代码行的写法 FISH 语言中的代码行,其写法要求严格,必须是以下格式之一: Ⅰ 代码行由语句打头,如 DEFINE,IF 等。 Ⅱ 代码行为 FISH 中定义的函数,需要说明的是多个函数间要用空格隔开。 2
FLAC3D 玩家宝典之 FISH 卷 作者 Sunshie (QQ 6192525) 比较好的一点是,FISH 代码中的函数名不用提前定义,只用在执行前定义即可。 Ⅲ 代码行由赋值语句组成。 Ⅳ COMMAND-ENDCOMMAND 语句中间的 FLAC3D 命令行。 Ⅴ 空行。 Ⅵ 分号 “;”打头的行。 需注意的是 FISH 中的变量名、函数名以及语句,都要写全,不能象 FLAC3D 命令中 那样缩写。此外,代码行不能续行,不过可以通过引入新变量解决此问题。还有一点, FISH 不区分大小写。 2 FISH 中函数名、变量名的取法 FISH 中的函数名或变量名必须以非 0 开始,并且名字中不能含有以下字符: 一般而言,除此要求外,用户可以随意取名,但应该避开 FISH 中预定义的变量和 函数名,最好也避开 FLAC3D 中的命令以及其缩写形式。 还要注意一点,如果变量名没有被赋值,则默认为 0。 三、四种格式 这里所的是,FISH 中变量以及函数的四种数据类型: 1.整型数据(介于-2147483648 和+2147483648 之间的整数)。 2.浮点型数据(精确到小数点后 15 位,介于 10-300 到 10300 之间)。 3.字符型数据(也就是字符串,可以是任意长度,FLAC3D 中,其表示通常为加上 单引号的一串字符) 4.指示字(扫描单元、网格点等清单时的机器编址)。 通过赋值可以动态的改变 FISH 中变量的数据类型,这一点与 FORTRON,C 语言相比, 更加便于新手理解和掌握。 四、两点说明 1.FISH 语言中的变量和函数名的时效 与 Basic 语言类似,FISH 语言中的变量名以及函数名在整个程序中都有效,不管 你是在 FISH 代码中还是在 FLAC3D 命令行中。 2.变量和函数名的调用格式 3
FLAC3D 玩家宝典之 FISH 卷 作者 Sunshie (QQ 6192525) 函数是 FISH 语言执行的唯一对象,它没有自变量,仅仅在调用时通过提前设置变 量的值来传递变量。函数 XXX 可以通过以下方式来调用: Ⅰ FISH 代码行直接引用函数名 XXX Ⅱ FISH 公式中被用到,如 Ⅲ FLAC3D 命令行中直接引用 Ⅳ 在代码输入行中,作为替换对象 Ⅴ 作为 SET,PRINT,HISTORY 等命令的参数。 五、一点补充 我们可以删除或重新定义 FISH 函数,方法是用同名的新代码取而代之,如果在 DEFINE 后直接跟 END 行,那么也就删除了原定义的函数。需补充的是: Ⅰ 本构模型不能删除或重新定义。 Ⅱ 当函数被删除了,但原有变量依然存在,因为变量是全局性的,如同在其他位 置一样。 Ⅲ 替换后,对原函数的调用会自动为新函数所取代。 4
FLAC3D 玩家宝典之 FISH 卷 作者 Sunshie (QQ 6192525) 第二章 Fish 语句用法精讲 FISH 语言中的语句不多,可以分为几类:指示说明语句;控制语句;FLAC3D 的命 令执行语句。本章重点介绍语句的用法。 一、两条指示语句 1. 在这个语句中,Var1 是任意有效的变量名,n1,n2…可以是整数,也可以是标量变 量(维数)或 ARRAY 执行过程中为整型数值的单个变量。同一代码行也可以定义多个 矩阵(如 Var 2)。每个矩阵可以有不同的维数。 ARRAY 语句是一个指示说明语句,它只在汇编过程中起作用,在执行过程中被忽 略。使用时,需要注意以下几点: 1.矩阵名可以是一个存在的单个变量,这样一来,变量便转化为一个矩阵并且原 变量值会丢失。如果是一个不存在的变量名,就会新建。 2.矩阵名不能是一个函数名或已经存在的矩阵名(也就是所,矩阵不能被重新定 义)。 3.矩阵维数(n1,n2…)一定要是正整数。 4.矩阵的维数和元素个数没有限制。 矩阵变量的使用很类似于单个变量,不同的是,其后常常接自变量清单(带圆括 号)。FLAC3D 命令行中对矩阵名的使用也有一定的限制,如 Print XXX (XXX 为一 FISH 矩阵名),只会打印出最大的矩阵指数;SET grav=XXX 是不允许的。接下来介绍几个关 于此条语句的实例,虽然很简单,但希望大家小心输入,注意输入后的变化。 实例 1:定义一个一维矩阵,并进行赋值。 实例 2:定义一个用 FISH 定义奇数和偶数组的例子。 5
FLAC3D 玩家宝典之 FISH 卷 作者 Sunshie (QQ 6192525) 语句 2. 在一个用户自定义函数中,只要出现 whilestepping 语句,在每一个 FLAC3D 计算 步开始时,函数都会自动执行。该语句的属性可以通过 SET fishcall 0 remove 命令修改 失效。FISHCALL 语句可以提供更为自由的计算控制,所以该语句应该不多,此处不作 详细介绍。 二、五对控制性语句 控制语句在 FISH 中十分重要,如下进行一一介绍。 1.函数语句 2.条件语句 6
FLAC3D 玩家宝典之 FISH 卷 作者 Sunshie (QQ 6192525) 该语句的语法结构为: 在这个结构中,CASEOF 后的 Expr 对象可以是任何有效的数学表达式,经过计算 后转化为整型数据;而词条 i1,i2…..等则必须是 0~255 中间的整型,不能为符号。如 果 Expr 等于 i1,系统会自动跳到 CASE i1 后语句执行,直到碰到下一条 CASE 语句, 系统才会到 ENDCASE 完成执行任务,类似 i2,i3,i4…..时原理完全一样,只是要说 明一点,如果 Expr 不等于 iN 中的任何一个,系统会执行第 1 个 CASE,如果 N 小于 0 或大于 255,系统就会出错停止执行。i1,i2….并不要求一定是连续或相邻整数。 下例为含有该句型用法的部分 FISH 流: 。。。。。。。。。。。 7
FLAC3D 玩家宝典之 FISH 卷 作者 Sunshie (QQ 6192525) 3.条件语句 条件语句 IF 是所有计算机语言中较为常用的语句,在该对语句中,通常 ELSE 为 可选项,THEN 可以省略不写。该语应用较为普遍,本节只简单介绍 FISH 语言中几个 需要注意的问题: Ⅰ TEST 词条常常由以下符号组成: Ⅱ EXPR1 和 EXPR2 可以是任意的有效代数式,可以包括函数,FLAC3D 变量 其中,#号意为≠。 等等。 Ⅲ 如果 TEST 结果为真,IF 后语句就会执行,直到执行下一条 ELSE 或者 ENDIF; 但如果测试结果为假,系统就会执行 ELSE 和 ENDIF 之间的语句,当然了,前提是存 在 ELSE 语句,呵呵。另外,ENDIF 执行后,系统自动跳回第一行。 Ⅳ 当 EXPR1 和 EXPR2 为字符串时,测试附后只能时两种,即 ,对字符串 而言,其他的操作时无效的,必须很精确的对等;指示字也一样。 Ⅴ 该语句可以嵌套到任何路径。 举个简单的实例,以理解其用法: 4.循环结构语句 FISH 中采用的循环结构语句只有 LOOP 语句,没有 FOR-NEXT 等语句,其结构 为 8
分享到:
收藏