整数値をデータ・スタックにプッシュするために、 あなたはソース・コードに数値を書きます。 たとえば 123
です。 数字の連なりの前に
-
を付けると、 負の数値を示すことができます。 たとえば -123
です。
これはコロン定義の内部と外部の両方で機能します。 数値は base
(基数)
の値に従って通訳(interpret)されます(see Number Conversion)。 「数字」は 0
~
9
、a
(10進数の10) ~ z
(10進数の35) です。 ただし、
基数(base)より小さい「数字」のみが認識されます。 変換では大文字と小文字が区別されないため、A
と a
は同じ「数字」になります。
以下のプレフィックスを使用すると、 数値の基数(base)を明示的に指定できます:
#
– 10進数(decimal)
%
– 2進数(binary)
$
– 16進数(hexadecimal)
&
– 10進数(decimal)(非標準)
0x
– 16進数(hexadecimal), if base<33 (非標準)
基数プレフィックスと符号を含む組み合わせの場合、 標準的な順序では基数プレフィックスを最初に配置します(例: #-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
に短縮できます(通常は短縮します)。
仮数部(e
や E
より前の部分)と指数の部分の両方に符号(+
を含む)を含めることができます。
仮数部には少なくとも 1 つの数字が含まれている必要があり、 小数点を含めることができます。 指数は空であってもかまいません。
浮動小数点数は仮数と指数の両方に常に 10 進数の基数を使用し、 基数が 10 進数の場合にのみ認識されます。 例: 1e 1e0 1.e
1.e0 +1e+0
(これらは全て同一の数値です)、 +12.E-4
Gforth 拡張機能 (1.0 以降)では、 浮動小数点数をスケーリングされた表記で書くことができます。 オプションで符号、 その次に 1
つ以上の数字を指定し、その後ろに、 主に SI で定義されたスケーリング記号(別名 メトリック・プレフィックス)または %
のうちの 1
つを使用でき、 その後に、 オプションで更に多くの桁を指定できます。 Gforth が受け入れるスケーリング記号の完全なリストは以下のとおりです:
Q
e30
quetta(クエタ)
R
e27
ronna(ロナ)
Y
e24
yotta(ヨタ)
Z
e21
zetta(ゼタ)
X
e18
exa(エクサ)(E
じゃ無いので注意)
P
e15
peta(ペタ)
T
e12
tera(テラ)
G
e9
giga(ギガ)
M
e6
mega(メガ)
k
e3
kilo(キロ)
h
e2
hecto(ヘクト)
d
e-1
deci(デシ)
%
e-2
percent(パーセント)(c
じゃ無いので注意)(訳注: 一般の centi(センチ)
と違うので注意)
m
e-3
milli(ミリ)
u
e-6
micro(マイクロ)(μ
じゃ無いので注意)
n
e-9
nano(ナノ)
p
e-12
pico(ピコ)
f
e-15
femto(フェムト)
a
e-18
atto(アト)
z
e-21
zepto(ゼプト)
y
e-24
yocto(ヨクト)
r
e-27
ronto(ロント)
q
e-30
quecto(クエント)
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
)。
この構文も非標準です。
ワード名を<
と >
で囲むことで、 ワードの本体(body)アドレスを取得できます(例:
<spaces>
)。 ワード名と末尾の >
の間に +
と数値を入れることで、
その本体アドレスから正のオフセットのアドレス(通常はそのワードの本体内のアドレス)を取得することもできます(例:
<spaces+$15>
, spaces+-3
)。 例えば <spaces+$15>
とか
<spaces+-3>
) とすると、 その本体アドレスに数値を足したのを得るでしょう。 この非標準機能は、 ...
の出力をコピーして貼り付けることを可能にするために存在します(see Examining data and code)。