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


6.16 Word Lists

ワードリスト(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 – ...) を実行します。


Next: Environmental Queries, Previous: The Input Stream, Up: Forth Words   [Contents][Index]