If statement 将IF语句与FORTH一起使用会产生“;解释“仅编译”一词;

If statement 将IF语句与FORTH一起使用会产生“;解释“仅编译”一词;,if-statement,forth,gforth,If Statement,Forth,Gforth,我在看书。我可以运行42=。 42 42 = ok 42 42 = . -1 ok 可以预见的是,我得到了-1,这表示true。但是,如果我在堆栈上推一个42,然后运行 42 .s 42 = IF ." foobar " THEN ; 我希望foobar被输出,但事实并非如此。相反,我得到了 42 .s <1> 42 ok 42 = IF ." foobar " THEN ; :2: Interpreting a compile-only word

我在看书。我可以运行
42=。

42 42 =  ok
42 42 = . -1  ok
可以预见的是,我得到了
-1
,这表示
true
。但是,如果我在堆栈上推一个
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 
42.s 42正常
42=如果为“foobar”,则为;
:2:解释仅编译的单词

42=>>>如果我相信这些必须被编译成单词,不管出于什么原因,表达式都不是原语。我相信书中提到了这一点

注意:
IF…THEN
语句必须包含在定义中。你不能只在“计算器风格”中输入这些单词

所以看起来是这样的,

: mycond 42 = IF ." foobar " THEN ;   ok
42 .s <1> 42  ok
mycond foobar  ok
42 mycond foobar  ok
:mycond 42=IF.“foobar”THEN;好啊
好的
我和foobar好吗
42我和foobar好吗
这又是一个问题

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


我相信这些必须被编译成文字,不管出于什么原因,这些表达都不是原语。我相信书中提到了这一点

注意:
IF…THEN
语句必须包含在定义中。你不能只在“计算器风格”中输入这些单词

所以看起来是这样的,

: mycond 42 = IF ." foobar " THEN ;   ok
42 .s <1> 42  ok
mycond foobar  ok
42 mycond foobar  ok
:mycond 42=IF.“foobar”THEN;好啊
好的
我和foobar好吗
42我和foobar好吗
这又是一个问题

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


完全结构化的单词仅用于编译单词用法 对于循环/if/while…直到等


仅使用Gforth文档。这是最好的。我想用Gforth。。。否则,您可能难以理解糟糕的示例或其他Forth口译员,ANSI Forth或gnuforth中未包含的特定单词。

准确的结构化单词仅用于编译单词用法 对于循环/if/while…直到等


仅使用Gforth文档。这是最好的。我想用Gforth。。。否则,您可能难以使用ANSI Forth或gnuforth中未包含的错误示例或其他Forth解释器特定单词。

Forth标准规定,控制结构(IF、else、THEN、DO、LOOP等)仅用于编译使用,交互使用是一种“不明确的情况”。有些实现允许交互使用,但它远不是通用的。

第四个标准说控制结构(IF、ELSE、THEN、DO、LOOP等)仅用于编译使用,交互使用是一种“不明确的情况”。有些实现允许交互使用,但它远不是通用的