在GW-BASIC和QuickBASIC中,语句都是传递的参数,其中一些是可选的,可以根据语句省略:
REM Move the text cursor to the specified column and row.
LOCATE row%, column%
REM Move the text cursor to the specified column without changing the row.
LOCATE , column%
在GW-BASIC中,CLEAR
语句很不寻常,因为它的第一个"自变量"总是被省略:
CLEAR , basicMem
CLEAR , basicMem, basicStack
CLEAR , , basicStack
在QuickBASIC中,由于解释器/运行时管理自己的内存,basicMem
参数变为可选参数:
CLEAR , , basicStack
我想知道的是,在GW-BASIC之前,第一个"论点"是否真的有用:
CLEAR missingArg, basicMem, basicStack
REM ^^^^^^^^^^
REM here
也就是说,在第一个逗号之前有没有一个有目的的非空论点?
如果有人有任何想法,我很想知道!
我想知道的是,第一个"参数"是否用于GW-BASIC之前的任何东西,即类似的东西实际上有用:
CLEAR missingArg, basicMem, basicStack REM ^^^^^^^^^^ REM here
也就是说,在第一个逗号?
是的,有第一个自变量,但从来没有一个三自变量形式真正使用过它。
微软(最初是Micro Soft(创建了Altair BASIC。它的特点是CLEAR
命令没有参数,可以将所有程序变量设置为零。4K版本没有字符串,因此不需要管理字符串空间。但是,8K、Extended和Disk版本有一个CLEAR
命令,该命令也接受形式为CLEAR x
的单个参数。值x
指定了可用字符串空间的最大值(以字节为单位(,在8K版本中,BASIC加载时的默认值为50字节,在扩展和磁盘版本中为200字节,直到它被更改[source]。这就是缺失的第一个论点的来源和最初的用途。然而,当时只有一个论点是有效的。
微软继续为几个系统开发了一种名为"BASIC-80"的衍生产品,尤其是英特尔ISIS-II、CP/M和TEKDOS操作系统。还创建了BASIC-80的"独立磁盘BASIC"版本,该版本可以在"几乎任何基于8080或Z80的磁盘硬件上运行,而无需操作系统。">没有4K版本的BASIC-80,因此可以合理地假设所有版本的BASIC-80都有可用的字符串,就像8K版本的Altair BASIC一样。因此,该字符串空间需要管理。然而,正是在BASIC-80中添加了第二个论点:
CLEAR [expression![,address]]
expression!
是一个指定字符串空间量的表达式,如8K(Altair(BASIC中的表达式,address
是BASIC可用的最大地址,即BASIC可用内存量,如GW-BASIC中第一个逗号后的自变量。
最终,BASIC-80 5.0版被推向了世界,它采用了奇怪的语法:
CLEAR [,[expression1][,expression2]]
expression1
是BASIC可用的最大内存,expression2
是堆栈空间量。附录A:BASIC-80 5.0版中的新功能解释了第一个参数被删除的原因:
- 字符串空间是动态分配的,两参数
CLEAR
语句中的第一个参数将被忽略
换句话说,CLEAR strSpace!,maxMem
将忽略BASIC-80 5.0版中的strSpace!
参数,因此语法变为CLEAR [,[maxMem][,maxStack]]
。
QuickBASIC最终将语法进一步更改为仅CLEAR [,,stack]
。令人困惑的是,QuickBASIC 4.5的在线帮助系统声明如下:
Note: Two commas are used before stack to keep QuickBASIC compatible
with BASICA. BASICA included an additional argument that set the
size of the data segment. Because QuickBASIC automatically manages
the data segment, the first parameter is no longer required.
提到的"第一个参数"是maxMem
,因为BASICA(和GW-BASIC(使用了BASIC-80 5.0版中可用的语法,而不是BASIC-80的5.0版之前版本中同样缺少的strSpace!
参数。