CREATE
¶定義ワードは、 ディクショナリーに新しいエントリを作成するために使用されます。 最も単純な定義ワードは CREATE
です。
CREATE
は以下のように使用します:
CREATE new-word1
CREATE
はパース・ワード(parsing word)です。
つまり、入力ストリームから引数(argument)を受け取ります(この例では new-word1
です)。 CREATE
は
new-word1
のディクショナリー・エントリを作成します。 new-word1
が実行される時は、
アドレスがスタックに残されるだけです。 そのアドレスは、 new-word1
が定義された時点のデータ空間ポインター(HERE
)の値を表します。したがって、 CREATE
は名前をメモリー領域のアドレスに関連付ける方法です。
Create
( "name" – ) core “Create”
注意: 標準 Forth は、 create
に対してのみ、 そのボディ部分がディクショナリのデータ空間(つまり、 here
や allot
などが機能する空間。 see Dictionary allocation)にあることを保証することに注意してください。 また、 標準 Forth では、 does>
で変更できるのは
create
で作成されたワードのみで(see User-defined Defining Words)、 標準 Forth の
>body
は create
されたワードにのみ適用できます。
この new-word1 の例を拡張して、 データ空間にメモリーを少々確保すると、 最終的には variable のような代物になります。 これを行う 2 つの異なる方法を以下に示します:
CREATE new-word2 1 cells allot \ 1 セル予約 - 初期値未定義 CREATE new-word3 4 , \ 1 セル予約 かつ (4で)初期化
これらの変数は、 以下のように @
(「フェッチ」(fetch;取り出す)) と !
(「ストア」(store;格納する)) を使用して検査(examine)および変更(modify)できます:
new-word2 @ . \ get address, fetch from it and display 1234 new-word2 ! \ new value, get address, store to it
同様のメカニズムを使用して配列を作成できます。 たとえば、 80 文字のテキスト入力バッファーです:
CREATE text-buf 80 chars allot text-buf 0 chars + c@ \ the 1st character (offset 0) text-buf 3 chars + c@ \ the 4th character (offset 3)
メモリーに適切な領域を割り当てることで、 思いつく限りの複雑なデータ構造を構築できます。 これについてさらに詳しく説明し、 それを容易にする Gforth ツールについて知りたい場合は、 See Structures を参照ください。