簡體   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