VALUEもまたForth規格に準拠した大域変数です。4バイト幅までの数値という以外には、型による制約はありません。便宜上、Value変数と呼ぶことにします。Variable変数に対して、Value変数は、他の"標準的"プログラミング言語における変数の挙動を模したものと見ることができます。
Value変数は、VALUE宣言によって生成されます。Variable変数と異なり、VALUE宣言に際しては、トップスタックに初期値が必要とされます。宣言後は、変数名とそこに格納されている値とを同一視することができます。Value変数に新たな値を格納するには、Mopsのデフォルトでは、前置ワード"->"を使います。
Value変数に新たな値を格納するためのForth標準ワードは"TO"です。これに対して、Mopsでは上のようにデフォルトでは、"->"となっており、"TO"は未定義です。ANSIコンパチブルモードでは置き換えられます。"->"は直観的にはわかりやすいでしょう。gazintaと呼ばれます。由来ははっきりしませんが、多分、goes intoが訛ったものだと思います。
35 VALUE MyNumber \ 初期値を35(=この時点でのトップスタック値)としてValue変数を生成
MyNumber \ MyNumberに格納されている値をトップスタックに返す
27 -> MyNumber \ 値27(=この時点でのトップスタック値)をMyValueに新たに格納
名前と初期値で、格納されている値のタイプが何であるのかわかるようにするとよいでしょう。
となります。
上の"gazinta"の
スタック効果コメントは、Mops用語集での書法に倣ったものです。後ろにある":word"という印は、"gazinta"の後に書かれたワードを"パース(parse)"して格納先となる変数を特定するということを意味しています。Forth規格での処方に従えば、( n :name -- )となります。ここではパースされるべき":name"は破線の左側におかれていますが、これは、この変数名を表す文字列がワード"gazinta"の出力ではなくて入力であることに着目した表記といえます。Mopsの表記法は、変数名を表す文字列がワード"gazinta"の後に書かれるということに着目しているともいえます。このサイトでは、一貫して、Mops書法にしたがうことにします。(なお"gazinta"自体はForth規格にあるワードではありません。ForthではTOになります。念のため。)
関連項目:
最終更新:2018年12月13日 00:54