§5.输入输出命令
一、LET
格式:[LET]变量=表达式
功能:使“=”左部的变量取“=”右部表达式的值。此处“=”称为赋值号,其左部和右部的数据类型必须相容。关键字LET可以省缺。
二、INPUT
格式:INPUT[字符串常量;]变量[{ ,变量}]
说明:[ ]内的部分可以省缺;{ }中的内容可以重复出现(下同)。
功能:程序运行中遇到此语句时将显示问号,等待用户为INPUT所跟的变量由键盘上输入相应类型常量数据。输入多个数据时,两个数据之间敲入一个逗号,以<CR>作结束。也可每输入一个数据敲一次<CR>。直至输入结束,程序下滑运行。
当INPUT紧跟有字符串常量时,这个常量会输出,作为提示信息。
三、GET
格式:GET变量[{,变量}]
功能:同INPUT类似,等待用户由键盘为相应变量输入数据,但它不给出任何提示,输入的数据也不予显示,且每个变量只接收一个键入码(因此,若GET带有多个变量时,由键盘输入的两个数据不得以逗号或<CR>分开,因为这种逗号或<CR>也会当作数据),输入结束后无需敲<CR>键,程序会继续往下执行。
四、READ/DATA
格式:READ变量[{,变量}]
DATA[常量[{,常量}]]
功能:执行READ语句时,它所跟的变量将依次取得DATA语句所跟的数据。因此要求DATA中的数据必须与READ中的变量依序具有相容的数据类型,且DATA中的数据个数不得少于READ中的变量的个数。只要不改变变量名的顺序,一个READ语句可拆写成多个READ语句;同样,只要不改变常量的顺序,一个DATA语句可拆写成多个DATA语句。DATA语句可写在程序的任何部位。
五、RESTORE
格式:RESTORE
功能:执行此语句后,若再遇READ语句,将从第一个DATA语句开始取得数据。
六、PRINT
格式:PRINT[表达式][{,表达式}][,]或[;]
功能:将所跟的表达式的值予以输出。两个表达式之间如用分号隔开时,后续输出将连接在一起;两个表达式之间由逗号隔开时,第2个表达式的值被送至第1个表达表值输出区的后续输出区(显示屏左右共分3个输出区,前两个区各占16个字符位置,第3区占8个字符位置)。PRINT不带表达式时,仅产生回车换行动作。PRINT输出的均为常量。
关键字PRINT可以用问号(?)代替。
XMF-BASIC对PRINT语句增加的功能是,可以将-65535~65535之间的数以十六进制数予以输出。这个范围内的数正好覆盖了64kB内存的全部正负地址。
七、 SPEED=
格式:SPEED=算术表达式
功能:用来设定输出的速度。算术表达式的值应在0~255之间。数值越小,输出速度越慢。正常情况下,系统设定其值为255。
八、VTAB和HTAB
格式:VTAB算术表达式
HTAB算术表达式
功能:用来设定输出字符的位置。VTAB用于设定输出的行,因此,它所跟的表达式的值必须在1~24之间。HTAB设定输出列的位置,它从当前光标所在列的左部算起,当所跟算术表达式的值比光标所在列数小时,此命令无效;当算术表达式的值大于40时,输出位置转下一行;算术表达式的值大于80时,再转下下行,如此类推。输出位置超过屏幕末行时,产生屏幕滚动。HTAB所跟表达式的值,必须在1~255之间。
九、FLASH、INVERSE和NORMAL
格式:FLASH
INVERSE
NORMAL
功能:设定输出字符的显示方式。FLASH设定为闪烁方式;INVERSE设定为反白方式;NORMAL设定为正常方式。一般情况下,系统自动设定成正常方式。
§6.控制命令
一、 GOTO
格式:GOTO行号
功能:无条件地跳转至指定的行号去继续运行。
这类被转移的行号,在APPLEⅡBASIC中必须用无符号的整数给出,而在XMF-BASIC中,允许以算术表达式的形式出现。以下几个命令中有类似情况,将不再一一说明。
二、IF…THEN
格式:IF逻辑表达式THEN语句[{ :语句}]
功能:当逻辑表达式的值为真时,执行THEN后面的语句;否则,跳过它们执行下一个程序行。
当THEN之后紧跟一个GOTO语句时,可省去THEN、GOTO两个关键字中的任一个,且GOTO语句之后的语句自行失效。
THEN之后的语句可以是任何一种语句,但若为循环语句(见下面的三)时,该循环语句必须写在本程序行内。THEN之后也可再有IF…THEN语句。
在APPLEⅡBASIC中,如果逻辑表达式最后一个字符为字母A,会将此字母与关键字THEN首字母组成关键字AT,造成解释执行错误。在XMF-BASIC中,能够正确地辨别与处理这种情况。
三、 FOR…NEXT
格式:FOR实变量=算术表达式1 TO算术表达式2 [STEP算术表达式3]
…
NEXT[实
?)
功能:这是一个具有特殊结构的语句,称循环语句,可以写在若干个程序行中组成一个程序段。其中,删节号部分为若干程序行,称为循环体,实变量称为循环变量,算术表达式1称为循环初值,算术表达式2称为循环终值,算术表达式3称为步长(或循环增量)。循环语句执行时,先使循环变量取循环初值,然后执行循环体内各语句,遇到NEXT时,循环变量的当前值加上步长再赋值给循环变量,接着检查循环变量的新值是否越过了循环终值,如果未越过,再次执行循环体内各语句,遇NEXT时再修改循环变量的取值并与循环终值进行比较。如此反复,直到循环变量的值超过循环终值时,结束循环语句,执行NEXT后面的语句。
循环体内的语句,可以是任何语句。如果循环体内有GOTO或IF…THEN之类跳转语句时,可在本循环体内跳转,也可以跳转至本循环体之外,但绝不允许从循环体外跳转至循环体内。如果循环体内再出现循环语句时,则构成循环嵌套,这种嵌套不得超过10层,并且不同层次不得交叉出现。
四、 GOSUB和RETURN
格式:GOSUB行号
RETURN
功能:程序遇到GOSUB时,将转至指定的行号执行一段子程序。在子程序的尾部应有命令RETURN,由它控制退出子程序,返回GOSUB语句的后续语句继续运行。
子程序中可以有任何语句。如果有循环语句时,通常FOR和NEXT均应在该子程序中。子程序中还可以通过GOSUB语句调用另一个子程序,从而构成子程序的嵌套,但这种嵌套不得多于25层。
五、POP
格式:POP
功能:它与RETURN有类似的作用,写在由GOSUB调用的子程序尾部,但执行POP后并不返回GOSUB的后续语句,而是接着运行POP之后的语句。
六、ON…GOTO和ON…GOSUB
格式:ON算术表达式GOTO行号[{,行号}]
ON算术表达式GOSUB行号[{,行号}]
功能:依算术表达式的当前值跳转至相应的程序行。算术表达式的值为1时,转至指明的第1个行号;算术表达式的值为2时,转至指明的第2个行号…。当算术表达式的值小于1或大于指明的行号个数时,本命令无效,直接执行后续语句。
ON…GOTO和ON…GOSUB之区别是,前者跳转至某一行号后,不会再转回来;而后者转至某行号后,那里应是一段子程序,遇RETURN后,会返回ON…GOSUB的下一个语句继续运行。
七、ON ERR GOTO和RESUME
格式:ON ERR GOTO行号
RESUME
功能:在执行ON ERR GOTO之后,如果程序中出现了错误,不会象平常那样给出提示并停止运行,而是转移至ON ERR GOTO指明的行号。用户应从该行号开始写出一段出错处理程序,并在这段程序之尾部置一条RESUME命令。机器执行这段程序后遇到RESUME,会自动返回刚才出错的地方继续运行。
八、STOP、END和CONT
格式:STOP
END
CONT
功能:STOP中止程序的运行,并提示中止的行号;END终结程序运行,不提示终止位置。CONT可使由STOP、END和CTRL-C停下来的程序继续运行下去。
§7.数组
一、 DIM
格式:DIM变量(算术表达式[{,算术表达式}])
功能:用来定义一个数组的维数和各最大下标值。未经DIM定义而直接使用的数组,各最大下标值被系统定义为10。
本机使用数组时,维数可多达88维。最大下标值的最大允许值依剩余空间大小而定,但不得为负值。
此处的变量名即数组名。
二、MAT(或@)
格式:MAT[LET]数组名=数组名[+或-数组名]
MAT PRINT数组名
功能:用于数组的整体赋值或打印。
第一种格式,可将“=”右部的数组(或右部两个数组各元素相加或相减后)赋值给“=”左部的数组。但对于字符串数组来说,“=”右部数组只能相加(联接)不能相减。
第二个格式,可将指定数组各元素一一输出,每个元素之间留出空格。对于二维以上的数组,输出完一行元素后会自动换行。
MAT命令是XMF-BASIC增加的命令,在APPLBⅡBASIC中不存在。
三、STORE和RECALL
格式:STORE算术型数组名
RECALL算术型数组名
功能:STORE可将指定的数组各元素录于磁带上;而RECALL则可将由STORE录于磁带上的数组元素依次读入机器中,成为RECALL指定数组的各元素。(待续)(张世英)