forget
Gforth 中是否有与 Forth 相同的词?
我见过 about marker
,但它没有相同的行为。此外,该list
命令似乎没有给出程序列表。
我想查看内存程序的列表,就像list
BASIC 中的旧程序一样 - 我认为这也是原始 Forth 中的行为。
FORGET 已过时,根据 Forth 标准作为对现有实现的让步,您需要“列出” Forth 单词的单词是 SEE <word>。
这个词已经过时,并且作为对现有实现的让步而包含在内。
我不知道 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
可能有一些方法可以利用标记的实现。它必须存储一个恢复指针,该指针可以访问以重置到某个定义的相关地址。
在我看来,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/