Paraphrase 値型リファレンス ver.

飯倉宏治

この文書では、Paraphrase ver. にて スタックにプッシ可能な値について説明します。 最初にユーザが陽にプッシュ可能なものについて、 後半にてシステム内部で使用されている値の種類について説明を行います。

目次

真偽値 bool
数値 int long big-int float double
文字列 string symbol
コンテナ array list assoc
ファイル file eof
ワード word
標準コード std-code
その他 eoc invalid

値型の詳細

真偽値

bool

解説 真を表す true または偽の値を表す false のいずれかを保持する値です。
実体 この値は C++ における bool にて実装されています。
変換用ワード等 この値への変換用ワードは特にありません。 true または false というワードを実行するか、 各種の比較演算用ワード等を実行することにより、 状況に応じた真偽値がスタックに積まれます。

厳密には変換ではありませんが、強いて言えば ワード eval を用いて、"true" eval などとすると、 文字列 true から bool 値である true をスタック上に 得ることができます。

接頭・接尾詞 ありません。
使用例 次の例では、真を表す値をワード true を用いて、スタックに 真を表す値 true を積んでいます。
> true
  ok.
> show // show ワードでスタックの状況を表示させてみると…
      +-----------+
TOS-->| bool true |
DS:-------------------
 ok.

数値

int

解説 32 ビットの符号あり整数値を表します。
実体 この値は C++ における int にて実装されています。
変換用ワード等 ワード >int により、TOS にある値を int に変換可能です (ただし、int に収まりきらない値の場合はエラーとなります)。
接頭・接尾詞 接頭語として 0x を付すと 16 進数として解釈されます。 10 進数としての値を入力する場合、接頭語・接尾後はありません。
使用例 次の例では、123 という int の値をスタックに積んでいます。
> 123
  ok.
> show // show ワードでスタックの状況を表示させてみると…
      +---------+
TOS-->| int 123 |
DS:-----------------
 ok.

次の例では、16 進数で FF という int の値をスタックに積んでいます。 FF は大文字でも小文字でも構いません(0xFF, 0xFf, 0xfF, 0xFF いずれの 形式でも全て同じ値となります)。

> 0xFF show
      +---------+
TOS-->| int 255 |
DS:-----------------
 ok.


long

解説 64 ビットの符号あり整数値を表します。
実体 この値は C++ における long にて実装されています。
変換用ワード等 ワード >long により、TOS にある値を long に変換可能です (ただし、long に収まりきらない値の場合はエラーとなります)。
接頭・接尾詞 接尾詞として L または l を付けることにより、 long の値として解釈するよう処理系に指示を出すことができます(使用例を参照)。 ただし、数値と L や l との間に空白を入れてはいけません。

16 進数を表す場合は int と同様 0x という接頭語を用います。

使用例 次の例では、123 という long の値をスタックに積んでいます。
> 123L
  ok.
> show // show ワードでスタックの状況を表示させてみると…
      +----------+
TOS-->| long 123 |
DS:------------------
 ok.

big-int

解説 多倍長整数を表します。 実際にスタックに積まれる値は、多倍長整数へのポインタとなります。
実体 この値は boost::multiprecision::cpp_int にて実装されています。
変換用ワード等 ワード >INT により、TOS にある値を big-int に変換可能です。
接頭・接尾詞 接尾詞として LL または ll を付けることにより、 big-int の値として解釈するよう処理系に指示を出すことができます(使用例を参照)。 ただし、数値と LL や ll との間に空白を入れてはいけません。

16 進数を表す場合は int と同様 0x という接頭語を用います。

使用例 次の例では、123 という big-int の値をスタックに積んでいます。
> 123LL
  ok.
> show // show ワードでスタックの状況を表示させてみると…
      +------------+
TOS-->| bigInt 123 |
DS:--------------------
 ok.

float

解説 32 ビットの浮動小数点数を表します。
実体 この値は C++ における float にて実装されています。
変換用ワード等 ワード >float により、TOS にある値を float に変換可能です。
接頭・接尾詞 小数点を含む値に対し、接尾詞として f を付けることにより、 float の値として解釈されるようになります。

ただし、接頭語 0x を付けている場合は末尾に f を付した場合でも、 float の値にはなりません。 例えば 0x10f は 0x10F と同値であり、16 進数で 10f という整数値を 表現するものとして解釈されます。 これは小数点を表す . (ピリオド) が含まれている場合でも変わりません。 FF という 16 進数値は数学的には 0xFF.0 と同値です。 であれば、0xFF という値を float で表現しているとして 0xFF.0f と表現したく なりますが、これは 16 進数で FF.0F という値を表していることと解釈されます。

接尾詞 f を付けない場合、小数点を表す . (ピリオド)が 含まれていると float もしくは double の値となります。 入力された値が float に格納できる場合は float の値となりますが、 float として格納できない場合は double の値として取り扱われます。

なお、.0f という記述は .f とも記述できます (例えば 123.f 等)。

使用例 次の例では 1.23 という float 値と 1.23 という double 値をスタックに積んでいます:
> 1.23f 1.23 show
      +-----------------+
TOS-->| double 1.230000 |
      | float 1.230000  |
DS:-------------------------
 ok.

一方、123.0 という値は float に格納可能と判断されるため、 接尾詞 f を付けなくとも float と判断されます:

> 123.0 show
      +------------------+
TOS-->| float 123.000000 |
DS:--------------------------
 ok.


double

解説 64 ビットの浮動小数点数を表します。
実体 この値は C++ における double にて実装されています。
変換用ワード等 ワード >double により、TOS にある値を double に変換可能です。
接頭・接尾詞 小数点を含む値に対し、接尾詞として d を付けることにより、 double の値として解釈されるようになります。

ただし、float 同様、接頭詞 0x が付されている場合は、 接尾詞の d は 16 進数の D として解釈されます。 詳細は float の説明を参照して下さい。

値に小数点が含まれている場合は float または double として解釈されます。 こちらについても詳細は float の説明を参照して下さい。 末尾の .0d を .d と省略できる点も float と同様です。

使用例 次の例では 123 という int 値と、 123.0 という double 値をスタックに積んでいます:
> 123 123.0d show
      +-------------------+
TOS-->| double 123.000000 |
      |      int 123      |
DS:---------------------------
 ok.

次の例では、FF.12345 という 16 進数値をスタックに積んでいます:

> 0xFF.12345 show
      +-------------------+
TOS-->| double 255.071106 |
DS:---------------------------
 ok.


文字列値

string

解説 文字列を表します。 詳細については、string.html も 併せて御覧ください。
実体 C++ の string を活用して実装されています。 実体は shared_ptr<string> で実装されているため、 dup で複製しても指している文字列の実体は同じです。 異なる実体を持つ文字列として複製するためには、 ワード clone にて複製して下さい。
変換用ワード等 ワード >str にて文字列に変換できます。
接頭・接尾詞 ダブルクォーテーションまたはシングルクォーテーションで くくることで文字列となります。

例:"123" は数値 123 ではなく、文字列の 123 となります。

使用例 次の例では、ダブルクォーテーションを用いて、 文字列 123 をスタックに積んでいます:
> "123"
  ok.
> show // show ワードでスタックの状況を表示させてみると…
      +--------------+
TOS-->| string '123' |
DS:----------------------
 ok.

symbol

解説 リストの中などで用いられるシンボルを表します。
実体 string 同様、C++ の string を活用して実装されています。 実体は shared_ptr<string> で実装されているため、 dup で複製しても指しているシンボルの実体は同じです。 異なる実体を持つシンボルとして複製するためには、 ワード clone にて複製して下さい。
変換用ワード等 ワード >symbol にて文字列はシンボルに変換できます。
接頭・接尾詞 英字もしくはアンダーバーから始まる文字列に対し、 接頭詞としてバッククォート ` を付すことにより、 以後の文字列をシンボルとして取り扱います。 バッククォートとその後に続く文字列との間には空白を置かないで下さい。

また、リストを構成している最中においては、 数値として認識されない文字列(例えば 1xy などの文字列)は バッククォートを先頭に付さずともシンボルとなります。

使用例 次の例では、バッククォートと接頭詞として abc というシンボルを スタックに積んでいます:
> `abc show
      +------------+
TOS-->| symbol abc |
DS:--------------------
 ok.

次の例は、リスト中に 1xy というシンボル値を格納しています:

> ( 1xy ) car show
      +------------+
TOS-->| symbol 1xy |
DS:--------------------
 ok.


コンテナ

array

解説 要素数が固定された配列を表します。
実体 array はほぼ C++ の配列として表現されています (「ほぼ」と書いたのは、配列と配列のサイズを保持する C++ の構造体がその実態だからです)。
変換用ワード等 数値の変換のような意味での変換用ワードはありませんが、 文字列を空白区切り文字で分解し、 それらを要素とする配列を作る >array というワードが存在します。
接頭・接尾詞 ありません。
使用例 特にありません。 ワード new-array-with の使用例を参照して下さい。

list

解説 リストを表します。 array は要素数が固定されていますが、list は可変長です。
実体 list の実態は C++ における deque へのポインタです (具体的には shared_ptr< deque<TypedValue> gt; です ※)。

TypedValue は、 本文書で説明している全ての値を格納可能な C++ の共用体です。
変換用ワード等 ありません。
接頭・接尾詞 ありません。
使用例 ワード ( と ワード ) を用いることで、 リストの構築が可能です:
> ( x y z 123 ) show
      +--------------------+
TOS-->| list ( x y z 123 ) |
DS:----------------------------
 ok.

assoc

解説 連想配列を表します。 list と同様、可変長のコンテナとなります。 配列 array ではインデックス値は整数である必要が ありましたが、連想配列 assoc では インデックスは任意の値となります。
実体 assoc の実態は C++ における unordered_map< TypedValue, TypedValue > です。
変換用ワード等 ありません。
接頭・接尾詞 ありません。
使用例 ありません。ワード new-assoc の例を参照して下さい。

ファイル

file

解説 ファイルへの入出力対象となるファイルオブジェクトを表します。
実体 本質的な実態は C++ における FILE ポインタです。
変換用ワード等 ありません。
接頭・接尾詞 ありません。
使用例 ありません。 ワード open の使用例を参照して下さい。

eof

解説 ファイルの終端を示す End Of File を表します。
実体 値としての実体はありません。 eof という値の種類を示す情報を保持しているのみです。
変換用ワード等 ありません。
接頭・接尾詞 ありません。
使用例 ありません。

ワード

word

解説 (無名)ワードを表します。
実体 実態はワードへのポインタです。
変換用ワード等 ワード名から word への変換は、ワード >word で可能です。
接頭・接尾詞 ありません。
使用例 ありません。 ワード >word の使用例を参照して下さい。

標準コード

std-code

解説 動的ライブラリで提供される標準コード仕様を満たす関数を表します。
実体 実態は C++ の関数へのポインタです。 関数は、bool (*)(Context&) noexcept 型である必要があります (ただしインタプリタ para をビルドする時に、noexcept キーワードが サポートされていないコンパイラを用いた場合は noexcept キーワードは不要です)。
変換用ワード等 ありません。
接頭・接尾詞 ありません。
使用例 ありません。 詳細については、ワード exec の仕様例を参照して下さい。

その他

eoc

解説 チャネルを通じた情報伝達が終了したことを示す End of Communicatioon を表します。 この値を受信したチャネルは、 内部に蓄えられている情報が無くなり次第、 eoc を返すようになります。
実体 値としての実体はありません。 eoc という値の種類を示す情報を保持しているのみです。
変換用ワード等 変換用ワードはありませんが、 eoc という同名のワードを実行することにより スタックに本値を積むことができます。
接頭・接尾詞 ありません。
使用例 ありません。

invalid

解説 無効な値を示します。
実体 値としての実体はありません。 invalid という値の種類を示す情報を保持しているのみです。
変換用ワード等 変換用ワードはありませんが、 invalid という同名のワードを実行することにより スタックに本値を積むことができます。
接頭・接尾詞 ありません。
使用例 ありません。