TSFXPR 簡易式記述

現在は、TSEXPR が実数をサポートするようになったので、もはや、TSFXPRを使用する必要はない。TSEXPR を使用すべきである。
TSFXPR の機能は過去との互換性を保つために残してある。

TSFXPR は、実数を計算するためのアプリケーションの埋めこみ言語である。
計算式として記述するので、必ず1行で完結する。 実数値、整数値、論理値を扱い、環境変数を変数として使用する。 記述言語は大文字、小文字を区別しない。 テキスト・インタプリタなので、実行速度は速くない。

1.型

論理型真偽の値。
整数型4バイトの符号付整数。
実数型浮動小数点

2.定数

論理定数TRUEFALSE
整数定数数字の連続
実数定数 小数表記と浮動小数点表記がある。
  1. 小数表記
    数字の連続 . 数字の連続。
    小数点以下を付加することで整数定数と区別する。
  2. 浮動小数点表記
    ddd.ddd Ennn
    のような形式
PI 円周率
CONST_E 自然対数の底

3.変数

TSFXPRは、独自の変数を持たない。環境変数を変数として読みこみ、整数あるいは実数として扱う。
環境変数名として扱えるのは、英数字、_、全角文字の組み合わせだけである。 残念ながら、すべての環境変数名が扱えるわけではない。
数値変数#環境変数名
文字列の内容を解釈して、整数または実数となる。 存在しない環境変数を参照すると、整数の0となる。

4.固有変数

一つのプログラムの範囲で有効な、番号付けされた領域(変数)が用意されている。
整数、実数の二種類、それぞれ、256個ずつ使える。
種類読み出し書き込み
整数 IVAR( num ) IVAR( num,value) 関数 IVAR を通じて読み書きする。初期値は 0。TSEXPRでの固有整数変数と同じ
実数 FVAR( num ) FVAR( num,value) 関数 FVAR を通じて読み書きする。初期値は 0.0。

 プログラム先頭での初期化について。
 固有変数は一つのプログラム全体で共通して使用できる。この初期化は、プログラム起動時に暗黙に行われる。 最初に規定の初期値以外の値を設定するためには、コマンドの最初の項、!^^を用いて式を書けばよい。
!^^での指定は、tsexprを呼び出すが、結果は何も出さないので、初期化式を書くのに適当である。 記述例は次の通り。

FXPR "!^^FXPR(FVAR(1,5.0))" "FVAR(1)+2.0;"

5.一時変数

一つの式の中でのみ有効な一時変数が26個用意されている
英字一文字で表し、論理値、数値、文字列を代入できる。変数の方は代入に応じて変わる。 式を起動した最初は対応する固有実数変数の値。

使用できる変数は、A-Z

間接指定するために VAR 関数が用意されている。
index は 0 から 25 までの値をとり、一時変数のA-Zに相当する。

A 変数名を書くことでその値を引用できる。型は最後に代入された値の型。
A(value) 変数に値を代入する。この式自体は、代入した値を返す。
VAR(index) 指定の変数の値。
VAR(index , value) 指定の変数に値を代入する。この式自体は、代入した値を返す。

6.SYS関数の略記

アプリケーションからの情報を受け取るSYS()関数に対して簡易記法がある。
SYS(番号)&番号
SYS(式)&()

7.演算子

数値同士の演算の場合、整数型と整数型の演算は整数型として実行する。整数と実数の混合演算は、 実数が現れた時点で整数を実数に変換してから実数の演算を行う。 演算子の優先順位は次ぎの通りである。
  1. ()の中
  2. 冪算演算子(^
  3. 乗算演算子(* /
  4. 加算演算子(+ -
  5. 比較演算子 大小比較の演算子。
  6. 否定演算子(NOT!
  7. 論理積演算子(AND
  8. 論理和演算子(OR
演算子整数実数論理
^冪算x
*乗算x
/除算の商除算x
+加算x
-減算x
>GT大きい。戻りは論理値。
>=GE大きいか、等しい。戻りは論理値。
<=LE小さいか、等しい。戻りは論理値。
<LT小さい。戻りは論理値。
=EQ等しい。戻り値は論理値。
!=NE等しくない。戻り値は論理値。
NOT!xxNOT 論理値 と書く。戻りは論理値。
ANDxx両辺の論理積。戻りは論理値。
ORxx両辺の論理和。戻りは論理値。

8.関数

関数の引数の実数、整数間は関数の要求に応じて自動的に型変換される。
関数索引
型変換関数 / 数学的関数 / 特殊な関数 / 制御関数 / アプリ引数 / 評価関数 / 内部変数関数 / 固有整数変数 / 固有実数変数 / 外部変数関数
型変換関数
INT int INT( )
式を型変換して整数にする。
式が論理型の場合は、真で1。偽で0。
FLOAT float FLOAT( )
式を型変換して実数にする。
式が論理型の場合は、真で1.0。偽で0.0。
BOOL bool BOOL( )
式を型変換して論理値にする。
式が整数の場合は、0でFALSE。それ意外ではTRUE。 式が実数の場合は、0.0でFALSE。それ意外ではTRUE。
数学的関数
ABS ABS(int | float )
数値の絶対値。戻り値の型は引数と同じ。
ACOS float ACOS(float )
アークコサインを計算する。
ACOSH float ACOSH(float )
ハイパーボリック アークコサインを計算する。
ASIN float ASIN(float )
アークサインを計算する。
ASINH float ASINH(float )
ハイパーボリック アークサインを計算する。
ATAN float ATAN(float )
アークタンジェントを計算する。
ATAN2 float ATAN2(float x,float y )
xとyからアークタンジェントを計算する。
ATANH float ATANH(float )
ハイパーボリック アークタンジェントを計算する。
BESSEL_J0 float BESSEL_J0(float )
ベッセル関数 j0を計算する。
BESSEL_J1 float BESSEL_J1(float )
ベッセル関数 j1を計算する。
BESSEL_JN float BESSEL_JN(int order,float val )
ベッセル関数 jnを計算する。
BESSEL_Y0 float BESSEL_Y0(float )
ベッセル関数 y0を計算する。
BESSEL_Y1 float BESSEL_Y1(float )
ベッセル関数 y1を計算する。
BESSEL_YN float BESSEL_YN(int order,float val )
ベッセル関数 ynを計算する。
COMBINATION float COMBINATION(int n,int r )
組み合わせnCr。
CEIL float CEIL(float )
整数の切り上げを求める。
COS float COS(float )
コサインを計算する。
COSH float COSH(float )
ハイパーボリック コサイン (双曲線余弦) を計算する。
DEG float DEG(float ラジアン )
ラジアンを度に変換
EXP float EXP(float )
指数関数を計算する。
FINITE bool FINITE(float )
式の値が有限数であれば真。
FLOOR float FLOOR(float )
引数以下の数のうちで最大の整数を返す。
FMOD float FMOD(float x,float y )
浮動小数点数の剰余を求める。
x = i * y + f となる x / y の浮動小数点型の剰余 f を計算する。 ここで i は整数。f は x と同じ符号であり、 その絶対値は y の絶対値より小さい値。
FRACPART float FRACPART(float )
引数の小数部分。
HYPOT float HYPOT(float x,float y )
直角三角形の斜辺を計算する。
( x の 2 乗 + y の 2 乗 ) の平方根
INTPART float INTPART(float )
引数の整数部分。
LOG float LOG(float )
自然対数。
LOG10 float LOG10(float )
常用対数。
FACTORIAL float FACTORIAL(int n )
階乗n!。
PERMUTATION float PERMUTATION(int n,int r )
順列nPr。
POW float POW(float x,float y )
べき乗を計算する。
x の y 乗
POW2 float POW2(float x,int y )
引数と 2 のべき乗の積を計算する。
x * ( 2^y)
RAD float RAD(float )
度をラジアンに変換
SIN float SIN(float )
サインを計算する。
SINH float SINH(float )
ハイパーボリック サイン (双曲線正弦) を計算する。
SQRT float SQRT(float )
平方根を求める。
CBRT float CBRT(float )
立方根を求める。
TAN float TAN(float )
タンジェントを計算する。
TANH float TANH(float )
ハイパーボリック タンジェント (双曲線正接) を計算する。
特殊な関数
INTEGRAL float INTEGRAL( 原関数 ,float 始点 ,float 終点 ,int 分割数 [ ,int 計算法 ] )
定積分。
原関数は、TSEXPRとして書かれ、戻り値は文字列であること。
この文字列で原関数を表す。変数は「X」を用いる。
"1.0/sqrt(1-x*x)"
分割数が大きすぎると、計算時間が長くなってしまうので注意すること。 計算方法は現在、以下の6種類がサポートされている。 いずれも、整数で指定する。計算法を省略するとシンプソン法が指定される。
計算法
1中央値使用
2台形公式
3シンプソン法
44分法(高次のシンプソン法)
55分法(高次のシンプソン法)
66分法(高次のシンプソン法)
DIFF float DIFF( 関数 ,float 計算点 ,float 増分 )
数値微分。
関数は、TSEXPRとして書かれ、戻り値は文字列であること。
この文字列で関数を表す。変数は「X」を用いる。
"X*X*X+2*X*X+3"
計算点における微分係数を求める。 実際には、計算点から増分だけ両側に離れた点同士の傾きを値としている。
POLYNOMIAL float POLYNOMIAL( float x {,float 係数}+ )
多項式の値。
POLYNOMIAL(1.2,1,2,1)
x2+2x+1のx=1.2でで値。
QUADRATIC_EQ int QUADRATIC_EQ( float a ,float b ,float c [,int 格納開始位置] )
二次方程式の解を求める。戻り値は解の数。
方程式は、次の形。
a x*x + b x + c
解は、固有実数変数に収められる。特に指定しなければ、fvar(0)(とfvar(1))に解が入る。 格納開始位置を指定すれば、その番号から二つの固有変数に解を格納する。
CUBIC_EQ int CUBIC_EQ( float a ,float b ,float c ,float d [,int 格納開始位置] )
三次方程式の解を求める。戻り値は解の数。
方程式は、次の形。
a x*x*x + b x*x + c x + d
解は、固有実数変数に収められる。特に指定しなければ、fvar(0)、fvar(1)、fvar(2)に解が入る。 格納開始位置を指定すれば、その番号から三つの固有変数に解を格納する。
EQSOLVER bool EQSOLVER( float 値1 ,float 値2 ,float ,int count [,int 格納位置] )
二分法で一元方程式を解く。戻り値は解の有無。
x を未知数とする方程式を解く。方程式は 式=0 として解く。
値1と値2の間に解があるものとして回数だけ繰り返して解を求める。解は、指定位置の固有実数変数に格納する。位置が指定されていなければfvar(0)に解が入る。
値1と値2を式に代入した値の符号は異なっていなければならない。
SUM flt SUM( int 開始インデックス ,int 終了インデックス ,float )
式の総和(煤jを求める。
式の中の一時変数 I にインデックスを代入して、式を呼び出し総和を計算する。
一時変数 I は、sum()の処理が終わると復帰する。
1 から 10 までの和ならば次のように書く。
sum(1,10,i)
PROD flt PROD( int 開始インデックス ,int 終了インデックス ,float )
式の総積(Π)を求める。
式の中の一時変数 I にインデックスを代入して、式を呼び出し総積を計算する。
一時変数 I は、prod()の処理が終わると復帰する。
1 から 10 までの積ならば次のように書く。
prod(1,10,i)
制御関数
IF IF(bool 条件式,式1,式2)
条件式が真ならが式1、偽ならば式2を返す。関数の返す型は、返却される値の型。
式1と式2の型は一致していなくてもよい。
DO DO(式記述 [,式記述]*)
引数の式を順次評価し、最後の式の値を返す。 戻り値の型は、最後の式の値。
WHILE intWHILE(bool 判定式 [,式記述]*)
判定式が真ならば以降のの式記述を実行する。判定式が負になるまで繰り返す。繰返し回数を返す。
繰り返し回数が WHILE_COUNT にセットされるので判定の基準に使用できる。
WHILE_COUNT int WHILE_COUNT
WHILE関数の中で参照できる繰り返し回数。最初の繰り返しでの値は 0。以降、繰り返しごとに +1 される。
WHILEがネストしている場合は、最も内側のWHILEでの値を返す。
COND COND( bool 判定式, [, bool 判定式,]* )
先頭から順に判定式と式の組み合わせを検査し、判定式が真のとき、式の値を返す。
真になるものがない場合には、論理値 FALSE を返す。
REPEAT REPEAT( int 回数,[, ]*)
指定した回数だけ、式を繰り返す。最後の式の値を返す。
回数が0以下を指定した場合は、いずれの式も実行されず、論理値 FALSEを返す。 指定した回数は、繰り返しごとに -1 される。この値は、REPEAT_COUNTで参照できる また、0 から始まり、繰返しごとに+1される、REPEAT_INDEX も参照できる。
REPEAT_COUNT int REPEAT_COUNT
REPEAT関数の中で参照できる残りの繰り返し回数。繰り返しごとに -1 される。
REPEATがネストしている場合は、最も内側のREPEATでの値を返す。
REPEAT_INDEX int REPEAT_INDEX
REPEAT関数の中で参照できる繰り返し回数。繰り返しごとに +1 される。初期値は 0 。
REPEATがネストしている場合は、最も内側のREPEATでの値を返す。
FORM FORM(,int小数桁数)
実数を最後に文字列に変換して返すときの形式指定。
  1. 小数部桁数を負に指定すると、自動変換形式。 それ以外では小数形式での小数部の桁数を指定する。
  2. 関数自体は式の値を返し、型も式と同じである。
アプリ引数
SYS float SYS(intインデックス)
アプリケーションによって機能が異なる。
略記法( &n、&(exp) )が用意されている。
評価関数
EXPR EXPR(式記述)
TSEXPRを実行する。
TSEXPR中のSYS関数は、TSFXPR中のSYS関数に対応する。 TSEXPRの返す型に応じて値と型が決まる。
TSEXPRの戻り値EXPR()の戻り値
BOOLBOOL
INTINT
STRFLOAT
FVAL FVAL(式記述)
TSEXPRを実行し、戻り値が文字列の場合は、その文字列をTSFXPR式として評価する。
文字列以外が戻った場合は、型に応じて値が決まる。
FVALは実際はTSEXPRの実行であるが、戻り値が文字列であるように扱えば、 文字列を式として評価する関数とみなすことが出来る。 次のような使い方を想定している。
FVAL("SQRT(2.0)")
内部変数関数
内部変数は式計算中にのみ有効な実数の記憶領域である。 インデックス0から15まで、16個用意されている。
VAR flt VAR( int index [ ,flt ] )
インデックス(0-15)で指定した内部変数の値を返す。
式を与えると、内部変数に式の値を代入し、その値を返す。
固有整数変数
 固有整数変数はアプリケーションの中で共通な領域である。
IVAR int IVAR(int index [, int value ])
index番目の整数固有変数の値を返す。valueを書くと、値をセットする。
indexは 0 から 255 までの値。
固有変数は。一つのプログラム内で共通の値を持つ。
PUSHIVAR int PUSHIVAR ( int )
引数の数値を固有整数変数に格納する。内部インデックスは1増加する。数値を返す。
互換性のために内部インデックスを操作する以下の機能もサポートしているが、IVARINDEX を使用することを勧める。

int PUSHIVAR
内部インデックスの値。
int PUSHIVAR ( bool TRUE,int 開始位置 )
内部インデックスに位置を設定する。
POPIVAR int POPIVAR
内部インデックスより一つ小さい値で示される固有整数変数の値。内部インデックスは1減少する。
PUSHIVARに対応する。
IVARINDEX int IVARINDEX [( int 位置 )]
内部インデックスの値。
引数を指定すると内部インデックスに位置を設定する。位置は0以上の整数。 PUSHIVAR / POPIVAR に対応する。
固有実数変数
FVAR float FVAR(int index [, float value ])
index番目の実数固有変数の値を返す。valueを書くと、値をセットする。
indexは 0 から 255 までの値。
固有変数は。一つのプログラム内で共通の値を持つ。
PUSHFVAR float PUSHFVAR ( float )
引数の数値を固有実数変数に格納する。内部インデックスは1増加する。数値を返す。

内部インデックスを操作する以下の機能が互換性のためにサポートされているが、FVARINDEX を用いることを勧める。

int PUSHFVAR
内部インデックスの値を返す。
int PUSHFVAR ( bool TRUE,int 開始位置 )
内部インデックスに位置を設定する。
POPFVAR float POPFVAR
内部インデックスより一つ小さい値で示される固有実数変数の値。内部インデックスは1減少する。
PUSHFVARに対応する。
FVARINDEX int FVARINDEX [( int 位置 )]
内部インデックスの値。
引数を指定すると内部インデックスに位置を設定する。位置は0以上の整数。 PUSHIVAR / POPIVAR に対応する。
MV2FVAR int MV2FVAR [ ( int 開始位置 [ , int 制限個数 ] ) ]
外部変数を一括して固有実数変数に複写する。複写した個数。
複写先の十ス変数の開始位置を指定できる。指定しなければ、0番が開始位置。
複写する個数の制限ができる。制限しなければ、外部変数のすべてを複写する。
FVAR_MEAN int FVAR_MEAN(int 開始位置,int 終了位置 )
固有実数変数の指定範囲の平均。
FVAR_SUM int FVAR_SUM(int 開始位置,int 終了位置 )
固有実数変数の指定範囲の和。
FVAR_SUM2 int FVAR_SUM2(int 開始位置,int 終了位置 )
固有実数変数の指定範囲の平方和。
FVAR_SD int FVAR_SD(int 開始位置,int 終了位置 )
固有実数変数の指定範囲の母標準偏差。
FVAR_SD1 int FVAR_SD1(int 開始位置,int 終了位置 )
固有実数変数の指定範囲の標本標準偏差。
FVAR_DIV int FVAR_DIV(int 開始位置,int 終了位置 )
固有実数変数の指定範囲の分散。
FVAR_DIV1 int FVAR_DIV1(int 開始位置,int 終了位置 )
固有実数変数の指定範囲の不偏分散。
FVAR_MIN int FVAR_MIN(int 開始位置,int 終了位置 )
固有実数変数の指定範囲の最小値。
FVAR_MAX int FVAR_MAX(int 開始位置,int 終了位置 )
固有実数変数の指定範囲の最小値。
FVAR_MED int FVAR_MED(int 開始位置,int 終了位置 )
固有実数変数の指定範囲の中央値。
外部変数関数
 外部変数は式評価の前にアプリケーションによって与えられる実数で、値の意味やその存否、数はアプリケーションによって異なる。
MV float MV(int インデックス)
外部変数を間接引用する。
インデックスは1から始まる。外部変数はアプリケーションによって異なる。
Mn float M1 .. M9
外部変数を簡易引用する。
M1からM9まで9個用意してある。 例えば、M1M(1)と同じ意味。
COUNT_M int COUNT_M
外部変数の個数。
SUM_M float SUM_M
外部変数の和。
SUM2_M float SUM2_M
外部変数の平方和。
SD_M float SD_M
外部変数の母集団標準偏差。
SD1_M float SD1_M
外部変数の標本標準偏差。
DIV_M float DIV_M
外部変数の分散。
DIV1_M float DIV1_M
外部変数の不偏分散。
MEAN_M float MEAN_M
外部変数の平均。
MIN_M float MIN_M
外部変数の最小値。
MAX_M float MAX_M
外部変数の最大値。
MED_M float MED_M
外部変数の中央値。

9.関数索引


A B C D E F H I L M P Q R S T V W


A
ABS ACOS ACOSH ASIN
ASINH ATAN ATAN2 ATANH
B
BESSEL_J0 BESSEL_J1 BESSEL_JN BESSEL_Y0
BESSEL_Y1 BESSEL_YN BOOL
C
CBRT CEIL COMBINATION COND
COS COSH COUNT_M CUBIC_EQ
D
DEG DIFF DIV1_M DIV_M
DO
E
EQSOLVER EXP EXPR
F
FACTORIAL FINITE FLOAT FLOOR
FMOD FORM FRACPART FVAL
FVAR FVARINDEX FVAR_DIV FVAR_DIV1
FVAR_MAX FVAR_MEAN FVAR_MED FVAR_MIN
FVAR_SD FVAR_SD1 FVAR_SUM FVAR_SUM2
H
HYPOT
I
IF INT INTEGRAL INTPART
IVAR IVARINDEX
L
LOG LOG10
M
MAX_M MEAN_M MED_M MIN_M
MN MV MV2FVAR
P
PERMUTATION POLYNOMIAL POPFVAR POPIVAR
POW POW2 PROD PUSHFVAR
PUSHIVAR
Q
QUADRATIC_EQ
R
RAD REPEAT REPEAT_COUNT REPEAT_INDEX
S
SD1_M SD_M SIN SINH
SQRT SUM SUM2_M SUM_M
SYS
T
TAN TANH
V
VAR
W
WHILE WHILE_COUNT