为什么默认情况下,Forth 中的所有单词都是全局的?



我正在学习福斯。为什么默认情况下,该语言中的所有单词都是全局的?

请纠正我,如果我正确命名字典的键 - 单词。

如果我们谈论的是范围界定,我认为原因是全局范围只是任何地方可用的最简单的方法。

是的,默认情况下,所有标准和用户定义的单词都具有全局范围。但是对于每个单词,其范围仅从其定义结束开始(因此在重新定义时,前一个单词可以在具有相同名称的新单词的定义中使用)。局部变量的范围受声明这些变量的定义正文的限制。

Forth还提供了更高级的技术来控制单词的可见性。

这些单词被分组到单词列表(一种命名空间)中。程序的任何部分都可以从单词列表的范围中排除(即该单词列表中的单词)。为此,应在程序的这一部分开始时从搜索顺序中排除此单词列表(并在最后还原)。 同样,程序的任何部分都可以通过将此单词列表包含在搜索顺序中(并在末尾还原)来包含在单词列表的范围内。当然,在这种情况下,我们有名称屏蔽的效果。

此外,许多Forth系统提供了一个API,允许使用单词列表部分限定的名称。 例如:module1::submodule2::word3,其中module1是搜索顺序可用的单词,并返回单词列表标识符wid1submodule2是在单词列表wid1中定义的单词,它返回单词列表标识符wid2,word3是在单词列表wid2中定义的单词。 (请参阅我的实现中的RESOLVE-PQNAME词作为参考)。

要更短地访问某个模块,您可以定义您的同义词,例如module1::submodule2 constant m并使用前缀m::访问此子模块中的单词作为m::word3

在我的 Forth 系统上,默认情况下,单词是在FORTH词汇表中创建的。查看您的 Forth 文档以获取词汇单词列表。我可以创建我需要的任何词汇表并将它们设置为默认值。下面是一个简单的操作,用于在两个词汇中创建两个具有相同名称的单词以及如何访问它们。

 Create two vocabularies ( in the FORTH vocabulary )
VOCABULARY ENGLISH
VOCABULARY FRENCH
ORDER    Show the search order and current vocabulary
 FORTH  EXTERNALS  ROOT
 Current: FORTH
ALSO ENGLISH
ORDER
 ENGLISH  FORTH  EXTERNALS  ROOT   ENGLISH added to the search order
 Current: FORTH                    New words created in FORTH
DEFINITIONS  ok       Change 'Current' to the top of the search order.
ORDER
 ENGLISH  FORTH  EXTERNALS  ROOT
 Current: ENGLISH                  New words created in ENGLISH
: trans   n -- ;
1- 6 * s" One   Two   Three Four  " DROP + 6 TYPE ;
PREVIOUS   Remove the top vocabulary from the search order
ORDER
 FORTH  EXTERNALS  ROOT   ENGLISH dropped from the search order.
 Current: ENGLISH         but still where new words will be created.
ALSO FRENCH DEFINITIONS
ORDER
 FRENCH  FORTH  EXTERNALS  ROOT
 Current: FRENCH                  New words created in FRENCH
: trans   n -- ;
1- 6 * s" Un    Deux  Trois Quatre" DROP + 6 TYPE ;
PREVIOUS DEFINITIONS
ALSO ENGLISH
1 trans 2 trans 3 trans 4 trans
 One   Two   Three Four   ok
PREVIOUS ALSO FRENCH
1 trans 2 trans 3 trans 4 trans
 Un    Deux  Trois Quatre ok

例如,汇编程序将位于另一个词汇表中,一旦执行代码定义词,该词汇表就会打开。之后,首先在汇编词表中搜索任何单词。

一些 Forth 实现允许模块。我从未使用过它们,但请查看您系统的文档。

相关内容

  • 没有找到相关文章

最新更新