是否有CLEAR声明的第一个参数?

5 gw-basic qbasic quickbasic

在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%
Run Code Online (Sandbox Code Playgroud)

在GW-BASIC中,该CLEAR语句相当不寻常,因为它的第一个"参数"总是被省略:

CLEAR , basicMem
CLEAR , basicMem, basicStack
CLEAR , , basicStack
Run Code Online (Sandbox Code Playgroud)

在QuickBASIC中,basicMem由于解释器/运行时管理自己的内存,参数变为可选:

CLEAR , , basicStack
Run Code Online (Sandbox Code Playgroud)

我想知道的是,第一个"参数"是否曾用于GW-BASIC之前的任何东西,即这样的东西实际上是有用的:

CLEAR missingArg, basicMem, basicStack
REM   ^^^^^^^^^^
REM      here
Run Code Online (Sandbox Code Playgroud)

也就是说,在第一个逗号之前是否有过有目的的非空论证?

如果有人有任何想法,我很想知道!

小智 6

我想知道的是,第一个"参数"是否曾用于GW-BASIC之前的任何东西,即这样的东西实际上是有用的:

CLEAR missingArg, basicMem, basicStack
REM   ^^^^^^^^^^
REM      here
Run Code Online (Sandbox Code Playgroud)

也就是说,在第一个逗号之前是否有过有目的的非空论证?

是的,有第一个论点,但从来没有一个3参数形式实际上使用它.

微软(最初是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都有字符串可用,因为Altair BASIC的8K版本可以使用.结果,需要管理该字符串空间.然而,在BASIC-80中增加了第二个参数:

CLEAR [expression![,address]]
Run Code Online (Sandbox Code Playgroud)

expression!是一个指定字符串空间量的表达式,如8K(Altair)BASIC,address是BASIC可用的最大地址,即BASIC可用的内存量,就像GW-BASIC中第一个逗号后面的参数一样.

最终,BASIC-80,5.0版本已经发布到世界各地,它的特点是奇怪的语法:

CLEAR [,[expression1][,expression2]]
Run Code Online (Sandbox Code Playgroud)

expression1是BASIC可用的最大内存,expression2是堆栈空间量. 附录A:BASIC-80 5.0版中的新功能解释了为什么删除了第一个参数:

  1. 字符串空间是动态分配的,并且CLEAR将忽略双参数语句中的第一个参数.

换句话说,CLEAR strSpace!,maxMem将忽略strSpace!BASIC-80,Release 5.0中的参数,因此语法变为CLEAR [,[maxMem][,maxStack]].

QuickBASIC最终将语法进一步改为just 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.
Run Code Online (Sandbox Code Playgroud)

提到的"第一个参数"是maxMemBASICA(和GW-BASIC)使用BASIC-80 5.0版提供的语法,而不是strSpace!BASIC-80 5.0之前版本使用的同样缺少的参数.