ワードリスト(wordlist)は名前付きワードのリストです。 新しいワードを追加したり、
ワードを名前で探したりできます(マーカー(markers)を使用して制限された方法でワードを削除することもできます)。 全ての名前付き(および
reveal
された)ワードは 1 つのワードリスト内にあります。
テキスト・インタープリターは、 検索順序スタック(the search order;ワードリストのスタック)に存在するワードリストをTOSから下へ検索します。 各ワードリスト内では、 概念的には最新のワードから検索が開始されます。 つまり、 ワードリスト内に同一の名前の 2 つのワードがある場合、 新しいワードが検索にヒットします。
新しいワードは「コンパイル・ワードリスト」(compilation wordlist)(現在のワードリスト(current wordlist)とも呼ばれます)に追加されます。
ファイルがファイル・ハンドルによって識別されるのとほぼ同じ方法で、 ワードリストはセル・サイズのワードリスト識別子(word list identifier; wid)によって識別されます。 wid の数値には(移植可能な)意味はなく、 セッションごとに変わる可能性があります。
標準 Forth の “Search order” ワード・セットは、
さまざまな異なるスキームの実装を可能にする低レベル・ツールのセットを提供することを目的としています。 Gforth は、 伝統的な Forth
ワードである vocabulary
も提供します。 compat/vocabulary.fs は、 標準 Forth
での実装を提供します。
forth-wordlist
( – wid ) search “forth-wordlist”
定数(Constant
) – wid は、Gforth が提供するすべての標準のワードを含むワードリストを識別します。
Gforth が呼び出されると、 このワードリストがコンパイル・ワードリストとなり、 検索順序スタック(the search
order)のTOSになります。
definitions
( – ) search “definitions”
現在検索順序スタック(the search order)のTOSにあるワードリストをコンパイル・ワードリストにします(訳注: :
definitions context current ! ;
)
get-current
( – wid ) search “get-current”
wid は、 現在のコンパイル・ワードリストのワードリスト識別子です。
set-current
( wid – ) search “set-current”
wid で識別されるワードリストをコンパイル・ワードリストに設定します。
get-order
( – widn .. wid1 n ) search “get-order”
検索順序スタック(the search order)の内容をデータ・スタックにコピーします。 現在の検索順序スタックには n 個のエントリがあり、 そのうち wid1 は最初に検索されるワードリスト(検索順序スタックのTOSにあるワードリスト) を表し、 widn は最後に検索されるワードリストを表します。
set-order
( widn .. wid1 n – ) search “set-order”
n=0 の場合、 検索順序スタック(the search order)を空(empty)にします。 n=-1 の場合、
検索順序スタックを実装定義で最小化します (Gforth の場合、 これはワードリスト Root
です)。 それ以外の場合は、
n 個の wid エントリを持ち、 wid1 が最初に検索されるワードリストを表し、 widn
が最後に検索されるワードリストを表すように、 既存の検索順序スタックを置き換えます。
wordlist
( – wid ) search “wordlist”
wid で表される新しい空(empty)のワードリストを作成します。
table
( – wid ) gforth-0.2 “table”
検索テーブル(lookup table)を作成します(英大文字と小文字を区別し、 警告なし)。
cs-wordlist
( – wid ) gforth-1.0 “cs-wordlist”
英大文字小文字を区別するワードリストを作成する。
cs-vocabulary
( "name" – ) gforth-1.0 “cs-vocabulary”
英大文字小文字を区別するボキャブラリーを作成する
>order
( wid – ) gforth-0.5 “to-order”
検索順序スタック(the search order)というワードリストのスタックにワードリスト wid をプッシュする(訳注: wid が 検索順序スタックの TOS になる)。
previous
( – ) search-ext “previous”
検索順序スタック(the search order)というワードリスト・スタックのTOSを捨てる
also
( – ) search-ext “also”
検索順序スタック(the search order)でTOSを DUP
するかのように振る舞います(訳注: : also
context >order ;
)。 通常はボキャブラリーの前で使います(例えば also Forth
)。 これにより、
ボキャブラリーによって表されるワードリストが検索順序スタックへプッシュされるという複合的な効果が得られます(訳注:検索順序スタックのTOSを指定のボキャブラリーで置き換えるのではなくて、
検索順序スタックのTOSにさらにプッシュする形にして、 ボキャブラリーの次が以前の検索順序スタックのTOSになるようにする)
Forth
( – ) search-ext “Forth”
検索順序スタック(the search order)の先頭にある wid を、 ワードリスト forth-wordlist
に関連付けられた wid に置き換えます。
Only
( – ) search-ext “Only”
検索順序スタック(the search order)を実装定義で最小化します(Gforth の場合、 これはワードリスト Root
です)。
order
( – ) search-ext “order”
検索順序スタック(the search order)とコンパイル・ワードリストを出力します。 検索順序スタックのワードリストは検索される順序で出力されます(従来のスタック表示方法とは逆になります)。 続けて、 コンパイル・ワードリストが最後に表示されます。
.voc
( wid – ) gforth-0.2 “dot-voc”
wid で表されるワードリストの名前を出力します。 vocabulary
または wordlist
constant
で定義された名前のみ出力できます。 それ以外の場合はアドレスを出力します。
find
( c-addr – xt +-1 | c-addr 0 ) core,search “find”
カウンタ付き文字列 c-addr によって指定された定義の名前を現在の検索順序スタック(the search
order)内の全てのワードリストで検索します。 定義が見つからない場合、 0 を返します。 定義が見つかった場合は、 1
(定義にデフォルト以外のコンパイル機能(compilation semantics)ある場合)または、 -1
(定義にデフォルトのコンパイル機能(compilation semantics)がある場合)を返します。 インタープリター状態で返される xt
はインタープリター機能(interpretation semantics)を表します。 コンパイル状態で返される xt は、
コンパイル機能(デフォルト以外のコンパイル機能の場合)を表すか、または、 コンパイル機能が compile,
(デフォルトのコンパイル機能の場合)となる実行時機能(run-time semantics)を表します。 ANS Forth 標準では、 返される
xt が何を表すかを明確に規定していない(または、 デフォルト以外のコンパイル機能ではなく即実行性についても言及している)ため、
このワードは移植可能なプログラムでは問題があります。 移植性がなくても問題ない場合には、 find-name
とその友達の方が優れています(see Name token)。
search-wordlist
( c-addr count wid – 0 | xt +-1 ) search “search-wordlist”
wid で識別されるワードリスト内で、 c-addr count の文字列で指定された定義を検索します。 定義が見つからない場合は 0 を返します。 定義が見つかった場合は、 xt とともに 1 (定義が即実行である場合)または、 -1 (定義が即実行でない場合)を返します。 Gforth では、返される xt はインタープリター機能(interpretation semantics)を表します。 ANS Forth では、 xt が何を表すか明確に規定していません。
words
( – ) tools “words”
検索順序スタック(the search order)の先頭にあるワードリスト内のすべての定義のリストを表示します。
vlist
( – ) gforth-0.2 “vlist”
WORDS
の古い(Forth-83 より前の)名前。
wordlist-words
( wid – ) gforth-0.6 “wordlist-words”
ワードリスト wid の内容を表示します(訳注: ワードリストに含まれているワードをリストする)。
mwords
( ["pattern"] – ) gforth-1.0 “mwords”
オプションのパラメーター pattern にマッチするすべてのワードをリストします。 指定しない場合、 すべてのワードが一致します。
ワードは古い方から新しい方へとリストされます。 search
のようなパターン・マッチ(デフォルト)ですが、 '
mword-filename-match is mword-match
を使用してワイルドカード(globbing)に切り替えることができます(訳注:
mwords
ENTER で全部リスト、 例えば mwords value
で value を含む名前をリスト)。
Root
( – ) gforth-0.2 “Root”
root ワードリストを検索順序スタック(the search order)に追加します。 このボキャブラリは最小の検索順序を構成し、 search-order のワードのみが含まれます。
Vocabulary
( "name" – ) gforth-0.2 “Vocabulary”
"name" の定義を作成し、 それに新しいワードリストを関連付けます。 "name" の実行時の効果は、 検索順序スタック(the search order)のTOSにある wid を、 "name" に関連付けられた wid に置き換えることです。
seal
( – ) gforth-0.2 “seal”
現在検索順序スタック(the search order)のTOSにあるワードリスト以外のすべてのワードリストを検索順序スタックから削除します。
vocs
( – ) gforth-0.2 “vocs”
システムで定義されているボキャブラリーとワードリストをリストします。
current
( – addr ) gforth-0.2 “current”
変数(Variable
) – コンパイル・ワードリストの wid を保持。
context
( – addr ) gforth-0.2 “context”
context
@
すると、 検索順序スタック(the search order)のTOSにあるワードリストの
wid が得られます。
map-vocs
( ... xt – ... ) gforth-1.0 “map-vocs”
システム内のすべてのワードリスト(テーブルと cs-wordlist を含む)に対して xt ( ... wid – ...) を実行します。