在Gforth中是否有相当于Forthforget
单词?
我见过marker
,但它的行为不一样。此外,list
命令似乎没有给出程序列表。
我想查看内存程序的列表,就像 BASIC 中的旧list
一样 - 我认为这也是原始 Forth 中的行为。
FORGET已经过时,根据Forth标准被包括在内,作为对现有实现的让步,你需要"列出"一个Forth单词的单词是SEE
这个词已经过时了,作为对现有 实现。
forth-standard.org/standard/tools/FORGET
在我看来,MARKER 和 FORGET 做同样的事情。唯一的区别是您需要提前设置它。我可以确认该行为如 Gforth 0.7.3 的Start Forth[1] 中所述。以下为摘录:
单词 忘记 在字典中查找给定的单词,并且在 效果,将其与任何您可能删除的内容一起从字典中删除 从那句话开始定义。忘记,就像口译员一样,搜索 从后面开始;他只删除最近定义的 单词的版本(以及后面的任何单词(。所以现在当 您在终端输入 GREET,解释器找到原件 迎接。
忘记是一个值得知道的好词;他帮助你清除你的 字典,所以它不会溢出。(字典占用内存 空间,因此与任何其他内存使用一样,您希望节省它。
有些福斯没有忘记。在这种情况下,您需要计划 提前忘记,例如:
标记 - 工作
定义空定义 -work 以标记 的当前系统状态 你。稍后执行 -work 时,系统状态为 恢复到定义 -work 时生效的状态。特别是,所有 在标记单词 -work 之后定义的单词将从 字典。
[1] https://www.forth.com/starting-forth/3-forth-editor-blocks-buffer/
我不知道Gforth,但是忘记基于旧的FIG Forth列表如下所示。它对字典布局和词汇组织非常敏感。像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
可能有办法利用标记的实现。它必须存储一个还原指针,该指针可以访问以重置到某些定义的相关地址。