将 IF 语句与 FORTH 一起使用会产生 "Interpreting a compile-only word"
USING IF Statement with FORTH produces "Interpreting a compile-only word"
我正在阅读 Starting Forth: 4. Decisions, Decisions...。我可以运行42 42 = .
42 42 = ok
42 42 = . -1 ok
不出所料,我得到 -1
,即 two's compliment 对应 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:
F7539250B30 throw
这是怎么回事?
我相信这些必须被编译成单词,无论出于何种原因,表达式都不是原始的。我相信这在书中有引用,
Notice: an IF…THEN
statement must be contained within a definition. You can’t just enter these words in “calculator style.”
所以它看起来像这样,
: mycond 42 = IF ." foobar " THEN ; ok
42 .s <1> 42 ok
mycond foobar ok
42 mycond foobar ok
这又是在 gforth docs on Conditional execution
In Forth you can use control structures only inside colon definitions. An if-structure looks like this:
完全结构化的词只是编译词用法
for 循环 / if / while...until 等等....
仅使用 Gforth 文档。这是最好的。我的意思是使用 Gforth ... 否则你可能会遇到不好的例子或其他 Forth 解释器特定的单词,这些单词不包括在 ANSI Forth 或 gnuforth 中。
FORTH 标准规定控制结构(IF、ELSE、THEN;DO、LOOP;等等)仅供编译使用,交互式使用是"ambiguous situation".一些实现允许交互式使用,但远非通用。
我正在阅读 Starting Forth: 4. Decisions, Decisions...。我可以运行42 42 = .
42 42 = ok
42 42 = . -1 ok
不出所料,我得到 -1
,即 two's compliment 对应 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:
F7539250B30 throw
这是怎么回事?
我相信这些必须被编译成单词,无论出于何种原因,表达式都不是原始的。我相信这在书中有引用,
Notice: an
IF…THEN
statement must be contained within a definition. You can’t just enter these words in “calculator style.”
所以它看起来像这样,
: mycond 42 = IF ." foobar " THEN ; ok
42 .s <1> 42 ok
mycond foobar ok
42 mycond foobar ok
这又是在 gforth docs on Conditional execution
In Forth you can use control structures only inside colon definitions. An if-structure looks like this:
完全结构化的词只是编译词用法 for 循环 / if / while...until 等等....
仅使用 Gforth 文档。这是最好的。我的意思是使用 Gforth ... 否则你可能会遇到不好的例子或其他 Forth 解释器特定的单词,这些单词不包括在 ANSI Forth 或 gnuforth 中。
FORTH 标准规定控制结构(IF、ELSE、THEN;DO、LOOP;等等)仅供编译使用,交互式使用是"ambiguous situation".一些实现允许交互式使用,但远非通用。