1

我正在阅读开始:4。决定,决定...... 我可以跑42 42 = .

42 42 =  ok
42 42 = . -1  ok

可以预见的-1是,我得到了两个人的赞美true但是,如果我将 a 压入42堆栈,然后运行

42 .s
42 = IF ." foobar " THEN ; 

我希望foobar被输出,但事实并非如此。相反,我得到

    42 .s <1> 42  ok
    42 = IF ." foobar " THEN ;  
:2: Interpreting a compile-only word
    42 = >>>IF<<< ." foobar " THEN ; 
Backtrace:
$7F7539250B30 throw 

这里发生了什么?

4

3 回答 3

3

我相信这些必须编译成单词,无论出于何种原因,表达式不是原始的。我相信这在书中被引用,

注意:IF…THEN声明必须包含在定义中。你不能只用“计算器式”输入这些词。</p>

所以它看起来像这样,

: mycond 42 = IF ." foobar " THEN ;   ok
42 .s <1> 42  ok
mycond foobar  ok
42 mycond foobar  ok

这再次出现在有关条件执行的 gforth 文档中

在 Forth 中,您只能在冒号定义中使用控制结构。if 结构如下所示:

于 2018-02-19T05:26:23.523 回答
1

完全结构化的词是编译词的用法,仅用于循环 / if / while...until & 等等...。

仅使用 Gforth 文档。这是最好的一个。我的意思是使用 Gforth ......否则你可能会遇到不好的例子或其他 Forth 解释器中未包含在 ANSI Forth 或 gnuforth 中的特定单词。

于 2018-02-22T07:25:44.773 回答
1

FORTH 标准规定控制结构(IF、ELSE、THEN;DO、LOOP 等)仅供编译使用,交互使用是一种“模棱两可的情况”。一些实现允许交互使用,但它远非普遍。

于 2018-05-04T14:47:19.560 回答