文字を呼び出す

文字の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