計算式(arithmetic)
MINERVA superseeded IF/Prolog. Please see http://www.ifcomputer.co.jp/MINERVA for details.

We discontinued to sell IF/Prolog Dec 31. 2003. For current customers, we continue to provide professional support for IF/Prolog until Dec 31, 2008.

<算術 関数/述語/演算子>

IF/Prologでは、整数演算および浮動小数点演算ができます。組み込み関数や述語によって計算式の値が求められます。その結果は、整数あるいは浮動小数のいずれかになります。 計算式表現(計算式)としては、以下のものを書くことができます。 - 数 - 計算式と以下に示す算術演算子のいくつかを組み合わせたもの - 値が計算式になる変数

<評価:is/2>

is/2は、その右側の引数つまり計算式の値を求め、それをまだ値を持っていない左側の引数に単一化します。ほとんどの算術関数および述語は、それらの引数を評価 (計算して値を求めること) します。以下に示す組み込み関数・述語において、計算式は、評価結果が整数あるいは実数にならなければならない計算式表現です。整数_式は整数表現で、必ず整数にならなければなりません。式の評価の結果が要求されたデ−タ型と異なる場合には、例外処理が行われます。

-結果 is +計算式: 計算式は数値が求められ、その結果は結果と単一化されます

注意:is/2は、右側の引数にくる計算式しか評価しません。他の算術関数は、左右両方の引数を評価します。

<範囲>

IF/Prologでは整数を4バイトで表現するので、完全な32ビット演算に使用できます。以下に示す関数は、ロ−カルな最大/最小整数を返します。ユ−ザは、これらの制限を越えないように注意して下さい。オ−バ−/アンダ−フロ−した場合でも、例外処理は行われません。このような場合には、下位の桁だけが残るか、あるいは符号が変えられます。

-結果 is maxint 最大整数(機種による) -結果 is minint 最小整数(機種による)

浮動小数は、通常は8バイトの倍精度浮動小数によって表現されますが、これはロ−カルな"C"の実装に依存します。実数のオ−バ−/アンダ−フロ−が起こると、例外処理out_of_rangeが引き起こされます。

<項の型チェックを行う述語>

digit(+項) 項がアラビア数字の場合は成功する integer(+項) 項が整数の場合は成功する numeric(+項) 項が整数または実数の場合は成功する real(+項) 項が実数の場合は成功する

これらの述語は、項が指定された数値デ−タ型、あるいは指定された型の値を持つ場合に成功します。

<算術演算子: -結果 is ..>

+ +計算式1 単項プラス - +計算式1 単項マイナス +計算式1 + +計算式2 加算、注意を参照して下さい +計算式1 - +計算式2 減算、注意を参照して下さい +計算式1 * +計算式2 乗算、注意を参照して下さい +計算式1 / +計算式2 実数除算、結果は実数 +整数_式1 div +整数_式2 整数除算、結果は整数 +整数_式1 // +整数_式2 整数除算、結果は整数 +計算式1 ^ +計算式2 累乗、結果は実数 +整数_式1 mod +整数_式2 剰余、結果は整数

注意:+,-,*による整数同士の演算結果は、整数になります。実数の引数がある場合には、結果は実数になります。

<シフト演算子: -結果 is ..>

+整数_式1 << +整数_式2 左へシフトする +整数_式1 >> +整数_式2 右へシフトする

<論理演算子: -結果 is ..>

+整数_式1 \/ +整数_式2 ビットごとの or +整数_式1 /\ +整数_式2 ビットごとの and \ +整数_式 1の補数

<対称算術述語>

sum(?計算式1,?計算式2,?計算式3) 計算式1は、計算式2と計算式3の和

inc(+Successor,-IncNumber) IncNumber := Successor - 1 inc(-Successor,+IncNumber) Successor := IncNumber + 1

<算術関数: -結果 is ..>

abs(+計算式) 絶対値 exp(+計算式) 指数関数 ln(+計算式) 自然対数 log10(+計算式) 10を底とする対数 sign(+計算式) 符号:1(正),-1(負),または0 sqrt(+計算式) 平方根

<三角関数: -結果 is ..>

acos(+計算式) 逆余弦 asin(+計算式) 逆正弦 atan(+計算式) 逆正接 cos(+計算式) 余弦 cosh(+計算式) 双曲線余弦 sin(+計算式) 正弦 sinh(+計算式) 双曲線正弦 tan(+計算式) 正接 tanh(+計算式) 双曲線正接

<比較を行う述語>

+計算式1 < +計算式2 値がより小さい +計算式1 =< +計算式2 値がより小さいか等しい +計算式1 =:= +計算式2 値が等しい +計算式1 =\= +計算式2 値が等しくない +計算式1 >= +計算式2 値がより大きいか等しい +計算式1 > +計算式2 値がより大きい +計算式1 = +計算式2 単一化できる +計算式1 \= +計算式2 単一化できない compare(-比較,+項1,+項2) 項1、項2の標準順序に関する比較。 <, >, = のいずれかに比較結果がセットされる。

注意: = および \= は、引数を評価しません。

<変換関数: -結果 is ..>

ceil(+計算式) 切り上げ(結果は実数) float(+計算式) 実数を返す floor(+計算式) 切り下げ(結果は実数) round(+計算式) 四捨五入して整数に変換 trunc(+計算式) 切り捨てによって整数に変換

<変換を行う述語>

make_number(+項,-数) 数またはアトムを数に変換 number(+数,-文字コ−ドリスト) 数を文字コ−ドのリストに変換 number(-数,+文字コ−ドリスト) 文字コ−ドのリストを数に変換

例題を参照して下さい。

注意:算術演算子とオペランドの間には、常にスペ−スがなければなりません。

?- M is maxint, numeric(M), X is M//2, Y is M/2.

M = 2147483647 X = 1073741823 Y = 1.07374e+09

yes ?- M is 999^200. E X C E P T I O N:out_of_range:_640 is 999 '^' 200 ?- X is 4.2 / 2, Y is 3^2, 5 is 16 // 3.

X = 2.1 Y = 9.0

yes ?- Z is cos(2.5) * sin(2*2.5) / tan(2.5/2), W is atan(tan(Z)). Z = 0.255264 W = 0.255264

yes ?- X is 168/3, Y is 168//3, X >= Y.

X = 56.0 Y = 56

yes ?- 124 mod 17 - 3 > 124 mod (17 - 3). no ?- _

too_large_constant 構文エラ−:定数が大きすぎる arith_expr_expected 引数が計算式の表現になっていない divide_by_zero 0で除算しようとしている out_of_range 結果の実数が大きすぎるか、または小さすぎる


Up read on...