Mopsでは、他のForth系言語と同じように、ワードを特定する数値データ(XT)を利用することができます。Mopsはこれをさらに進めて、XT値を格納するのに便利な変数を提供しています。この変数は、VECTという宣言で作り出されます。仮にVECT変数と呼ぶことにします。
iMopsでは、VECTの機構は実装されていません。代わりに、Forth標準であるDEFERの機構が導入されています。
参考:
DEFER(Forth解説サイトのページ。下方にあります。)
VECT変数を利用する際のシンタックスは、VALUE変数に準じます。宣言時に、トップスタックに初期値が必要です。安全のため、必ず何らかのワードのXTを格納する必要があります。
' null VECT myVect \ nullのXTを初期値としてVECT変数myVectを生成
上のような宣言が最も典型的なものです。nullはMopsの既定ワードで、何もしないワードです。
スタック効果コメント:
myVectに新しいXTを格納するには、前置ワード"->"を使います。
' NewWord -> myWord \ 実行状態で
: .... [[[']]] NewWord -> myWord .... \ コンパイル状態で
VECT変数を呼び出せば、そこに格納されているXTに対応するワードが自動的に実行されます。ワードEXECUTEが不要であることが最大の特徴といえます。
myVect \ myVectに「格納された」ワードを実行
つまり、VECT変数は、「内容を変えることができるワード」ということもできます。特にMopsでは、アプリケーションをインストールする場合のことを考えると、xtを格納するには、普通の変数よりもVECT変数に格納しておいた方が安全です。
模式的サンプルコードをあげます。
' null VECT myVect
.....
: MyWord1 ..... ;
: MyWord2 ..... ;
: SetToWord1 ['] MyWord1 -> myVect ;
: SetToWord2 ['] MyWord2 -> myVect ;
はじめにmyVectを実行(呼び出)しても、何もしません。SetToWord1を実行した直後にmyVectを実行するとMyWord1が実行されます。さらに、SetToWord2を実行した直後にmyVectを実行するとMyWord2が実行されます。
関連項目:
最終更新:2019年06月18日 17:19