文字列をメモリーに保存する方法については、 String representations を参照してください。
キーボードから一行入力するためのワード群:
accept
( c-addr +n1 – +n2 ) core “accept”
ユーザー入力デバイスから最大 n1 文字の文字列を取得し、 c-addr に保存します。 n2
は受け取った文字列の長さです。 ユーザーは RET を押して終了を指示します。 Gforth は、 accept
で、
Forth コマンド・ラインで利用できるすべての編集機能(履歴やワード補完を含む)をサポートしています。
edit-line
( c-addr n1 n2 – n3 ) gforth-0.6 “edit-line”
accept
のように振る舞いますが、バッファ c-addr n1 の内容を先頭から長さ n2 まで引用します(
n2=0 の場合、 全く引用せず、 空の状態から入力編集開始になります)。 受け取った文字列の長さを n3 に返します。
変換ワード群:
s>number?
( addr u – d f ) gforth-0.5 “s>number?”
文字列 addr u を 符号付き2倍長整数 d に変換し、 フラグ f が true ならば成功、 false
ならば変換失敗です( d の値は保証されません) (訳注: フラグが true の場合でも -15.
基数プレフィックスを付けずに記述した場合、 警告が出力されます。 警告が出ないようにするには基数プレフィックスを付けて下さい #-15.
)
s>unumber?
( c-addr u – ud flag ) gforth-0.5 “s>unumber?”
文字列 c-addr u を 符号なし2倍長整数 ud に変換します。 フラグ f が true ならば成功、 false
ならば変換失敗です( d の値は保証されません)。 (訳注: フラグが true の場合でも 15.
基数プレフィックスを付けずに記述した場合、 警告が出力されます。 警告が出ないようにするには基数プレフィックスを付けて下さい #15.
、
注意: 負数も受け付けます; "#-15." s>unumber? .s <3> -15 -1 -1 ok drop -15 -1
ud. 340282366920938463463374607431768211441 ok
"#340282366920938463463374607431768211441." s>unumber? .s <3> -15 -1 -1 ok 3
)
>number
( ud1 c-addr1 u1 – ud2 c-addr2 u2 ) core “to-number”
文字列 c-addr1 u1 を現在の基数で符号なし2倍長整数に変換しようと試みます。 符号なし2倍長整数 ud1
に変換結果を積算して ud2 にします。 変換は、 文字列全体が変換されるか、 現在の基数で変換できない文字( ‘+‘ または ‘-‘
を含む)が検出されるまで、 左から右に続行されます。 変換可能な各文字ごとに、 ud1 * base
してから、
次にその文字によって表される値を足しこみます( new ud1 = ud1 * base + digit )。 c-addr2 は、
最初の未変換文字の位置です(文字列全体が変換された場合は文字列の末尾以降)。 u2 は、 文字列内の未変換の文字の数です。
最後まで変換出来たときは 0 です。 オーバーフローは検出されません。
>float
( c-addr u – f:... flag ) floating “to-float”
実際のスタック効果: ( c_addr u – r t | f )。 文字列 c-addr u を内部浮動小数点表現に変換しようとします。 文字列が有効な浮動小数点数を表す場合、 r が浮動小数点スタックに配置され、 flag が true になります。 それ以外の場合、flag は false になります(訳注: この場合、 浮動小数点数スタックには何も積まれない)。 空白の文字列は特殊なケースであり、 浮動小数点数 0 を表します。
>float1
( c-addr u c – f:... flag ) gforth-1.0 “to-float1”
実際のスタック効果: ( c_addr u c – r t | f ) c を小数点として使用して(訳注: ’.’ が小数点とは限らない。ロケールにより異なるため、指定できるようになっている)、 文字列 c-addr u を内部浮動小数点表現に変換しようと試みます。 文字列が有効な浮動小数点数を表す場合、 r が浮動小数点スタックに配置され、 flag が true になります。 それ以外の場合、flag は false になります(この場合、浮動小数点数スタックには何も積まれません)。 空白の文字列は特殊なケースであり、浮動小数点数 0 を表します。
時代遅れ(OBSOLESCENT)の入力ワード群と変換ワード群:
convert
( ud1 c-addr1 – ud2 c-addr2 ) core-ext-obsolescent “convert”
時代遅れ(OBSOLESCENT): >number
に置き換えられました。
expect
( c-addr +n – ) core-ext-obsolescent “expect”
最大 +n 文字の文字列を受け取り、c-addr から始まるメモリーに保存します。 文字列は表示されます。
<return>キーを押すか、 +n 文字を受け取ると入力が終了します。 通常の Gforth 行編集機能が利用可能です。 文字列の長さは
span
に保存されますが、 <return> 文字は含まれません。 時代遅れ(OBSOLESCENT): accept
に置き換えられました。
span
( – c-addr ) core-ext-obsolescent “span”
変数(variable) – c-addr は、 expect
によって最後に受け取った文字列の長さを格納するセルのアドレスです。 時代遅れ(OBSOLESCENT)。