前のセクションでは、 一連のコマンドを使用して変数を生成する方法を説明しました。 最終的な改良として、 (次のセクションの主題を先取りして)そのコード・シーケンス全体を定義ワードでまとめることができ、 新しい変数の作成が容易になります:
: 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倍長変数と浮動小数点変数に対して、 それぞれ 2Variable
と fvariable
も提供します。
これらは、Gforth ではそれぞれ 0. と 0e に初期化されます。 Variable
を使用してブール値を保存する場合、
on
と off
を使用してその状態を切り替えることができます。
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 に初期化しますが、 標準では保証されません。