文字のASCII値をとるForth標準ワードとしてCHARがありますが、コンパイル状態で同等の機能を果たすForth標準ワードは、[CHAR]として別に定義されています。例えば、
: MyWord ... [CHAR] A ..... ;
のようにすれば、MyWordの実行時にAのASCII値(65)がスタックに積まれます。もしも、これを
: MyWord ... CHAR A ..... ; \ 間違い
と書いてしまったときには、コンパイラはAをワードと勘違いし、普通は、そのようなワードは知らないとエラーを吐くでしょう。
以上に対して、Mopsのユーティリティーワードでこれらと等価なワード「&」は、実行状態では直ちに後続文字のASCII値をスタックに返し、コンパイル状態では、そこで定義されたワードが実行されたときに後続文字のASCII値をスタックに返します。つまり、実行状態ではCHARに等しく、コンパイル状態では[CHAR]に等しいわけです。「&」のようなワードはState-Smartであるといわれます。
[CHAR]を実行状態で呼び出すのには意味はありませんが、CHARをワード定義の中で呼び出すことに全く意味がないかというと、そうではありません。これは、&だけでは実現しにくい機能です。ですから、&のようなワードを一つだけ持つよりは、CHARと[CHAR]の二つだけを持つ方が可能性は広がるといえます。この二つだけで&の機能は充足できますし、加えてそれを超える機能を持ちうるからです。
なお、頻用する特殊文字には定数が準備されています。
BL \ 空白(Blank)=32
RET \ 改行(return)=13(=CR;Macintoshテキストの改行は、これ)
どうでもいいことですが、ちなみに私の場合は、ASCII値が必要なときは、BLとRET以外はその数値を直接書き込んでしまいます。なんだかわからなくなりそうなところだけ
コメントをつけます。(^^;;)
関連項目:
最終更新:2018年12月14日 22:33