2017-05-12 4 views
1

一部のオンラインgforthドキュメントは一見complete description of base-execute's effects提供:Gforthのベース実行構文

base-execute  i*x xt u – j*x   gforth  “base-execute” 

execute xt with the content of BASE being u, and restoring the 
original BASE afterwards. 

しかし、効果のための構文は、キーなしでロックのように思える - 何i*x xt u – j*xが意味を説明し何もページのリンク。いくつかの狩猟は、それはまだi*x xt u – j*xを理解するのに十分ではありません(u符号なし数xtトークン実行されていることを教えてくれるもの)、partial description of the syntax notationを上げ。

base-executeはどのように使用されますか?

答えて

3

base-executeを理解する必要があると理解してくださいexecuteBASEです。また、スタック効果でi*xj*xを読み取る方法についても説明します。

executeは、実行トークンxtを実行して実行します。 ' 1+ executeは、1+と同じです。ただし、xtをあらかじめ選択する必要はなく、スタックに渡すことができるため、executeを使用する理由があります。例えば:

: exec-twice dup >r execute r> execute ; 
2 ' 1+ exec-twice . (this outputs 4) 

BASE数値ベースが入力と出力に使用するかを制御する変数です。 BASEは最初は10です。したがって5 2 BASE ! .101(これはベース2に5)を出力します。

base-executeは、それらを一緒に置く:それは、uBASEを変更xtを実行し、その前の値にBASEを復元します。その実装は次のようになります。i*x xt u -- j*xのための今

: squared (n1 -- n2) dup * ; 
: squares (n --) 0 do i squared . loop ; 

10 squares (0 1 4 9 16 25 36 49 64 81) 

: hex-execute (i*x xt -- j*x) 16 base-execute ; 

10 ' squares hex-execute (0 1 4 9 10 19 24 31 40 51) 

10 squares (0 1 ... 81 we're back to decimal) 

:ここ

: base-execute BASE @ >r BASE ! execute r> BASE ! ; 

は使用例です、あなたがリンクされ

スタック表記のドキュメントへの情報のほとんどを持っていますその効果を読み取る必要があります。 i*x -- j*xは、何かがスタックに発生する可能性がありますが、何も指定していないことを意味します。この場合、正確なスタック効果はxtの値に依存します。

xtのスタック効果の両面でi*xj*xを置き換え、与えられたxtでスタック効果を知っています。

たとえば、xt' .の場合、n --という.のスタックエフェクトが表示されます。その場合、base-executeのスタック効果はn xt-of-. u --と考えることができます。

+0

非常に参考になりますが、上記から '* base-execute'を使用する方法は明らかではありません。答えは、基本的なサンプルの使用法または2つで改善されます。 – agc

+0

良い点、私は例を追加します。 –

+0

ありがとう!ちょうど普通の 'base-execute'は楽しいです。すなわち、' 10 '四角形は3つの場合は3つの基底が実行され、 '10は四捨五入されます。95 base-execute'は暗黙のためです。 – agc

関連する問題