VECT

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の既定ワードで、何もしないワードです。スタック効果コメント
VECT ( xt -- :name )

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