Fコード
フォーマット
F [ ; ] element [ ; element ...]
Fコードは、レコードのデータ値に対して数学的演算を行ったり、文字列を操作したりする。 これは、セミコロンで区切られた逆ポーランド形式(Lukasiewicz)のオペランドまたは演算子で構成されます。
プログラムはFコードを左から右に解析し、オペランドのスタックを構築する。 演算子に出会うたびに、要求された演算を実行し、結果をスタックの先頭に置き、必要に応じて下位のスタック要素をポップする。
セミコロン( ; )は要素の区切り文字である。
要素には、以下のカテゴリーから1つ以上の項目を指定することができる:
データの場所または文字列
- loc[R]
- スタックにプッシュされるデータ値を指定する数値の位置で、オプションでその後にR(リピートコード)が続く。
- Cn
- nはスタックにプッシュされる定数である。
- string
- ダブルクォーテーション ( " )、シングルクォーテーション ( ' )、またはバックスラッシュ ( ˶ ) で囲まれた文字列。
- number
- ダブルクォーテーション ( " )、シングルクォーテーション ( ' )、またはバックスラッシュ ( ˶ ) で囲まれた定数。正の整数、負の整数、またはゼロを指定できます。
- D
- システム日付(内部フォーマット)。
- T
- システム時刻(内部フォーマット)。
特別なシステム・カウンタ・オペランド
- NI
- カレント®アイテムカウンター(表示または選択されたアイテムの数)。
- ND
- ブレークライン上の最後のBREAKからの詳細行数。
- NV
- 列リスト専用の現在値カウンタ。
- NS
- 列リスト用の現在のサブ値カウンタのみ。
- NB
- 現在の BREAK レベル番号。 1 = 最低レベルの故障。 これは、総計行で255の値を持つ。
- LPV
- Load Previous Value:直前の相関コードの結果をスタックにロードする。
オペレーター
演算子は、スタックの先頭エントリに対して実行される操作を指定する。 stack1はスタックの一番上の値、stack2はそのすぐ下の値、stack3は stack2の下の値、といった具合である。
- *[n]
- stack1にstack2を掛ける。 オプションのnはディスケーリング係数である(つまり、結果は10のn乗で割られる)。
- /
- stack1を stack22に分割し、結果をstack1に戻す。
- R
- と同じだが、商の代わりに余りがスタックの一番上に返される。
- +
- stack1を stack2に追加する。
- -
- stack2 からstack1を減算し、結果をstack1へ(stack1 からstack2を減算する REALITY フレーバーを除く)。
- :
- stack1の文字列をstack2の文字列の末尾に連結する。
- [ ]
- 部分文字列を抽出する。 stack3文字列は、stack2で指定された文字から始まり、stack1 で指定された文字数分展開される。 これはBASICの[m,n]演算子と同じで、mは stack22に、nは stack11にある。
- S
- stack1の多値の合計がスタックの一番上に置かれる。
- _
- stack1とstack2の値を交換する。
- P または
- stack1をスタックに戻す(つまりstack1を複製する)。
- ^
- stack1の値をスタックからポップする。
- 納得
- 標準の変換演算子はstack1のデータを変換し、結果をstack1に入れる。
論理演算子
論理演算子はstack11とstack2を比較する。 それぞれ、trueなら1、falseなら0を返す:
- =
- 等しい。
- <
- より小さい。
- >
- より大きい。
- # または <>
- イコールではない。
- [
- 以下である。
- ]
- 以上であること。
- &
- 論理 AND。
- !
- 論理 OR。
- \n\
- ラベルは、2つのバックスラッシュ(◆)で囲まれた正の整数で定義される。
- #n
- stack11とstack2が異なる場合、ラベルnに接続する。
- >n
- stack1が stack2より大きい場合、ラベルnに接続する。
- <n
- stack1が stack2より小さい場合、ラベルnに接続する。
- =n
- stack1が stack2に等しい場合、ラベルnに接続する。
- }n
- stack1が stack2以上の場合、ラベルnに接続。
- {n
- stack1が stack2以下の場合、ラベルnに接続。
- IN
- stack1ヌル値かどうかをテストする。
- フンフン
- stack1が false と評価された場合、F コードでnnnn文字先に分岐し、処理を続行する。
- ブンブン
- Fコードで無条件にnnnn文字前に分岐し、処理を続行する。
- グーン
- ラベルnnnnへ。 ラベルはバックスラッシュ( ˶ˆ꒳ˆ˵ )で区切られた文字列でなければなりません。
- G*
- stack1 で定義されたラベルに移動する。 ラベルはバックスラッシュ( ˶ˆ꒳ˆ˵ )で区切られた文字列でなければなりません。
注:Fコードは整数演算のみを行う。