5

在 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

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

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

4

1 回答 1

6

我想知道的是,在 GW-BASIC 之前,第一个“论点”是否曾用于任何事情,即类似这样的东西实际上是有用的:

CLEAR missingArg, basicMem, basicStack
REM   ^^^^^^^^^^
REM      here

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

是的,有第一个参数,但从来没有真正使用它的 3 参数形式。

微软(原微软)创建了 Altair BASIC。它的特点是CLEAR没有参数的命令将所有程序变量设置为零。4K 版本没有字符串,因此不需要管理字符串空间。但是,8K、Extended 和 Disk 版本有一个CLEAR命令,它也接受形式为 的单个参数CLEAR x。该值x指定了可用的最大字符串空间量(以字节为单位),在 BASIC 加载时的默认值在 8K 版本中为 50 字节,在扩展和磁盘版本中为 200 字节,直到它被更改[来源]。这就是缺少的第一个参数的来源以及它最初的用途。然而,当时只有一个论点是有效的。

微软继续为多个系统开发一种名为“BASIC-80”的衍生产品,特别是英特尔 ISIS-II、CP/M 和 TEKDOS 操作系统。还创建了 BASIC-80 的“独立磁盘 BASIC”版本,可以在“几乎任何基于 8080 或 Z80 的磁盘硬件上运行,无需操作系统”。 BASIC-80 没有 4K 版本,因此可以合理地假设所有版本的 BASIC-80 都有可用的字符串,就像 Altair BASIC 的 8K 版本一样。因此,需要管理该字符串空间。然而,在 BASIC-80 中添加了第二个参数

CLEAR [expression![,address]]

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

最终,BASIC-80,Release 5.0,被发布到世界上,它的特点是奇怪的语法

CLEAR [,[expression1][,expression2]]

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

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

换句话说,CLEAR strSpace!,maxMem将忽略strSpace!BASIC-80 版本 5.0 中的参数,因此语法变为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 中可用的语法,而不是strSpace!BASIC-80 的 5.0 之前版本使用的同样缺失的参数。

于 2018-12-11T10:26:35.207 回答