6

forgetGforth 中是否有与 Forth 相同的词?

我见过 about marker,但它没有相同的行为。此外,该list命令似乎没有给出程序列表。

我想查看内存程序的列表,就像listBASIC 中的旧程序一样 - 我认为这也是原始 Forth 中的行为。

4

3 回答 3

3

FORGET 已过时,根据 Forth 标准作为对现有实现的让步,您需要“列出” Forth 单词的单词是 SEE <word>。

这个词已经过时,并且作为对现有实现的让步而包含在内。

第四标准.org/standard/tools/FORGET

于 2020-07-09T15:50:19.990 回答
2

我不知道 Gforth,但基于旧的 FIG Forth 列表的 FORGET 如下所示。它对词典布局和词汇组织非常敏感。nfa(名称字段地址)和 lfa(链接字段地址)等词具有更现代的等价词。当我运行它时,它崩溃了(VFX),但它可能会为某人指明正确的方向。

variable FENCE

\ Per fig forth listing ( slightly modernised )
: forget  \ "word-to-forget-from"
  CURRENT @ CONTEXT @ - ABORT" Vocabulary error."
  ' DUP FENCE @ < ABORT" Word below FENCE."
  DUP NFA DP ! LFA @ CURRENT ! ;

DP @ FENCE !

\ What was tested.  WARNING crashed Forth!!
\ My guess is that CURRENT needs to be set to a different address
: forget  \ "word-to-forget-from"
  CURRENT @ CONTEXT @ - ABORT" Vocabulary error."
  ' DUP FENCE @ < ABORT" Word below FENCE."
  >LINK DUP DP !  \ Set the top of the dictionary
  @ CURRENT ! ;   \ Point current to the last valid definition

可能有一些方法可以利用标记的实现。它必须存储一个恢复指针,该指针可以访问以重置到某个定义的相关地址。

于 2020-06-26T14:54:56.260 回答
2

在我看来,MARKER 和 FORGET 做的事情一样。唯一的区别是您需要提前设置它。我可以确认该行为与使用 Gforth 0.7.3开始 Forth [1] 中所述相同。这是摘录:

FORGET 这个词在字典中查找一个给定的词,实际上,从字典中删除它以及从那个词之后你可能定义的任何东西。FORGET和解释器一样,从后面开始搜索;他只删除该词的最新定义版本(以及随后的任何词)。所以现在当你在终端输入 GREET 时,解释器会找到原始的 GREET。

FORGET是个好词;他帮助你清理你的字典,这样它就不会溢出。(字典占用内存空间,因此与任何其他内存使用一样,您希望节省它。)

有些 Forths 没有 FORGET。在这种情况下,您需要提前计划遗忘,例如:

MARKER-工作

定义空定义 -work 为您标记当前系统状态。当您稍后执行 -work 时,系统状态将恢复到定义 -work 时的状态。特别是,在标记词 -work 之后定义的所有词都从字典中完全删除。

[1] https://www.forth.com/starting-forth/3-forth-editor-blocks-buffer/

于 2020-07-21T15:48:57.190 回答