Next: , Previous: , Up: Gforth   [Contents][Index]


5 Literals in source code

整数値をデータ・スタックにプッシュするために、 あなたはソース・コードに数値を書きます。 たとえば 123 です。 数字の連なりの前に - を付けると、 負の数値を示すことができます。 たとえば -123 です。 これはコロン定義の内部と外部の両方で機能します。 数値は base (基数) の値に従って通訳(interpret)されます(see Number Conversion)。 「数字」は 09a (10進数の10) ~ z (10進数の35) です。 ただし、 基数(base)より小さい「数字」のみが認識されます。 変換では大文字と小文字が区別されないため、Aa は同じ「数字」になります。

以下のプレフィックスを使用すると、 数値の基数(base)を明示的に指定できます:

基数プレフィックスと符号を含む組み合わせの場合、 標準的な順序では基数プレフィックスを最初に配置します(例: #-123)。 Gforth は両方の順番をサポートします。

小数点 . を数値の末尾(または非標準的に、 プレフィックスの前を除く他の場所)に置くと、 2倍長整数double-cell integer)として扱われます(例: #-123. または #-.123 (この2つは同一の数値です))。 別のプログラミング言語の経験があるユーザーは、 基数プレフィックスのない、 このような数値(例: -123.) を見たり書いたりする場合、 その数値が浮動小数点値を表すものと期待する可能性があります。 混乱を早期に解決するために、 Gforth はそのような使用法について警告しています。 警告を回避するには、 常に基数プレフィックスを付けて 2倍長整数(double-cell integer)を記述することをお勧めします(例: #-123.)

以下にいくつかの例を示します。 なお、 同値の 10 進数が括弧内に示されています:

$-41 (-65), %1001101 (205), %1001.0001 (145 ; 2倍長整数), #905 (905), $abc (2478), $ABC (2478).

(文字)コード・ポイントの数値を取得するには、 文字を ' で囲みます (例: 'a')。 末尾の ' は標準では必須ですが、Gforth では省略できます。 注意: これは非 ASCII 文字でも機能することに注意してください。 多くの用途では、 文字をセルとしてではなく文字列として持つ方が便利です。 文字列の構文については、 以下を参照してください。

Forth の浮動小数点数は、 その指数によって認識されます。 つまり、 1. は 2倍長整数(double-cell integer)で、 そして 1e0 は浮動小数点数です。 後者は 1e に短縮できます(通常は短縮します)。 仮数部(eE より前の部分)と指数の部分の両方に符号(+ を含む)を含めることができます。 仮数部には少なくとも 1 つの数字が含まれている必要があり、 小数点を含めることができます。 指数は空であってもかまいません。 浮動小数点数は仮数と指数の両方に常に 10 進数の基数を使用し、 基数が 10 進数の場合にのみ認識されます。 例: 1e 1e0 1.e 1.e0 +1e+0 (これらは全て同一の数値です)、 +12.E-4

Gforth 拡張機能 (1.0 以降)では、 浮動小数点数をスケーリングされた表記で書くことができます。 オプションで符号、 その次に 1 つ以上の数字を指定し、その後ろに、 主に SI で定義されたスケーリング記号(別名 メトリック・プレフィックス)または % のうちの 1 つを使用でき、 その後に、 オプションで更に多くの桁を指定できます。 Gforth が受け入れるスケーリング記号の完全なリストは以下のとおりです:

Gforth の残りのほとんどとは異なり、 スケーリング・シンボルは大文字と小文字が区別されて扱われます。 スケール表記を使用するということは、 スケール記号の代わりに小数点を使用し、 末尾に指数表記を追加することと同じです。 スケール表記の例: 6k5 (6500e), 23% (0.23e)

文字列を " で囲んで入力できます(例: "abc""a b")。 その結果は、データスタック上の、 文字列の開始アドレスと、 バイト(=char)のカウントです。

文字列内の "\ でエスケープする必要があります(例: "double-quote->\"<-")。 さらに、 この文字列構文は、 s\" でサポートされている制御文字を記述するすべての方法をサポートしています(see String and Character literals)。 この文字列構文の欠点は、 標準ではないことです。 標準プログラムの場合は、 "…" の代わりに s\" を使用してください。

環境変数を取得するには、 最初に rec-env.fs をロードし、 次に環境変数の前に $ を付けます (例: $HOME)。 結果は、 上で説明した形式のデータ・スタック上の文字列記述子(string descriptor)になります。 これは "HOME" getenv と同等です。つまり、 環境変数は実行時(run-time)に解決されます。

ワード名の前に ` を付けることで、 ワードの実行トークン (xt) を取得できます (例: `dup)。 ' または ['] を使うよりも有利な点は、 コロン定義の内側から外側へ、 またはその逆にコードをコピーして貼り付けるときに、 これらを切り替える必要がないことです。 欠点は、 この構文が標準ではないことです。

ワード名の前に `` を付けることで、 ワードのの名前トークン (nt) を取得できます (例: ``dup)。 この構文も非標準です。

ワードの本体アドレスを <> で囲むことで取得できます (例: <spaces>)。 ワード名と末尾の > の間に + と数値を入れることで、 その本体アドレスから正のオフセットのアドレス(通常はそのワードの本体内のアドレス)を取得することもできます(例: <spaces+$15>, spaces+-3)。 例えば <spaces+$15> とか <spaces+-3>) とすると、 その本体アドレスに数値を足したのを得るでしょう。 この非標準機能は、 ... の出力をコピーして貼り付けることを可能にするために存在します(see Examining data and code)。


Next: Forth Words, Previous: An Introduction to Standard Forth, Up: Gforth   [Contents][Index]