1

最近、comp.lang.forthで、Coos Haak によって親切に書かれたコードを見つけましたが、理解が困難です。

括弧の間の数字を合計または乗算することになっています。例えば、

( 1 2 3 +)  ok
. 6  ok

便宜上、ここに再現します。

: ( 
   depth 1+ r> 2>r 
; 

: cond 
   depth j > 
; 

: done 
   2r> rdrop 2>r 
; 

: +) 
   begin   cond 
   while   + 
   repeat 
   done 
; 

: *) 
   begin   cond 
   while   * 
   repeat 
   done 
; 

r> 2>rとというフレーズが見えます2r> rdrop 2>r。しかし、私は彼らが何をしているのかについてかなり混乱しています。左括弧のスタックの深さが、何らかの形で戻りスタックに隠されていると思います。しかし、私はそれを理解していません。

これらは戻りスタックに何をしますか?

Gforth のドキュメントには次のように記載されています。

r>        R:w – w        core           “r-from”
2>r       d – R:d        core-ext       “two-to-r”
2r>       R:d – d        core-ext       “two-r-from”
rdrop     R:w –          gforth         “rdrop”

w  Cell, can contain an integer or an address 
d  double sized signed integer

これは、w と d の間の変換と関係がありますか?

4

2 に答える 2