繁体   English   中英

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

[英]USING IF Statement with FORTH produces “Interpreting a compile-only word”

我正在阅读《 起点》:4.决策,决策...。 我可以运行42 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 

这里发生了什么?

我相信无论出于何种原因表达式都不是原始语言,都必须将它们编译成单词。 我相信本书中会提到这一点,

注意: IF…THEN语句必须包含在定义中。 您不能仅以“计算器样式”输入这些字词。

所以看起来像这样

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

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

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

完全结构化的单词仅在循环/ if / while ...直到此类情况下才用作编译的单词。

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

FORTH标准表示控制结构(IF,ELSE,THEN,DO,LOOP等)仅用于编译使用 ,而交互使用则是“模棱两可的情况”。 一些实现允许交互式使用,但是它远非通用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM