Next: , Previous: , Up: Defining Words   [Contents][Index]


6.10.2 Variables

前のセクションでは、 一連のコマンドを使用して変数を生成する方法を説明しました。 最終的な改良として、 (次のセクションの主題を先取りして)そのコード・シーケンス全体を定義ワードでまとめることができ、 新しい変数の作成が容易になります:

: myvariableX ( "name" -- a-addr ) CREATE 1 cells allot ;
: myvariable0 ( "name" -- a-addr ) CREATE 0 , ;

myvariableX foo \ variable foo starts off with an unknown value
myvariable0 joe \ whilst joe is initialised to 0

45 3 * foo !   \ set foo to 135
1234 joe !     \ set joe to 1234
3 joe +!       \ increment joe by 3.. to 1237

当然のことながら、 Forth にはすでに Variable の定義があるため、 myvariable を定義する必要はありません。 標準 Forth は、 Variable が作成時に初期化されることを保証しません(つまり、 myvariableX のように振る舞う可能性があります)。 対照的に、Gforth の Variable は変数を 0 に初期化します(つまり、 myvariable0 とまったく同じように振る舞います)。 Forth は、 2倍長変数と浮動小数点変数に対して、 それぞれ 2Variablefvariable も提供します。 これらは、Gforth ではそれぞれ 0. と 0e に初期化されます。 Variable を使用してブール値を保存する場合、 onoff を使用してその状態を切り替えることができます。

Variable ( "name" –  ) core “Variable”

name を定義し、 addr で始まるセルを予約します。 name 実行時: ( -- addr )

AVariable ( "name" –  ) gforth-0.2 “AVariable”

variable と同様に機能しますが、 (クロス・コンパイルされたコードで使用される場合)その変数に格納されているセルがアドレスであることをクロス・コンパイラーに伝えます。

2Variable ( "name" –  ) double “two-variable”
fvariable ( "name" –  ) floating “f-variable”

最後に、 任意の長さのバッファーは以下のようになります

buffer: ( u "name" –  ) core-ext “buffer-colon”

name を定義し、addr から始まる u バイトを予約します。 name 実行時: ( -- addr ) なお、 Gforth は予約したバイトを 0 に初期化しますが、 標準では保証されません。