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では、オペレ−タは不可欠なものではないということに注意して下さい。オペレ−タは、構文をわかりやすくするために使われます。以下の2つの等価な項のうち、最初の方が簡単でわかりやすくなっています。
Z is 4 + 5 * 3. is(Z, '+'(4, '*'(5,3))).
オペレ−タは、位置、優先順位、結合性の3つの属性を持ちます。
(優先順位)
優先順位は、違う優先順位のオペレ−タを持つ項の解釈のうち、どれを 優先するかを決定するために整数0-1200が使われます。
例えば "a+b*c" は、 a+(b*c) あるいは (a+b)*c と解釈できます。
優先順位の低い項が最も強く結合されます。括弧で囲まれた、あるいは 複合項でない項の優先順位は0です。上記のa+(b*c)という解釈は、"+" が"*"より高い優先順位の場合に選ばれます。(a+b)*cという解釈は"*"が"+"より高い優先順位の場合に選ばれます。
(位置)
位置は、引数に対してオペレ−タをどこに置くかを定義します。以下の 3つの位置をとることができます。
PREFIX(前置) op 項 オペレ−タが単一の引数の「前」に現れる
INFIX(中置) 項 op 項 オペレ−タが2つの引数の「間」に現れる
POSTFIX(後置) 項 op オペレ−タが単一の引数の「後ろ」に現れる
(結合性)
結合性は、同じ優先順位のオペレ−タを持つ項の解釈のうち、どれを選択するかを決定するために使われます。
例えば"a+b-c"は、a+(b-c)あるいは(a+b)-cと解釈できます。
位置と結合性を表わす属性演算子の分類は、以下のように表記されます。"f"はオペレ−タを表し、"x"と"y" は引数を表します。"x"は、オペレ−タより優先順位の低い引数を表し、"y"はオペレ−タに等しいか、あるいは優先順位の低い引数を表します。
yfx 中置 左から結合
xfy 中置 右から結合
xfx 中置 結合しない
fx,fy 前置
xf,yf 後置
式の評価の順序は、式の結合性とオペレ−タの優先順位の両方に依存します。優先順位の低い項が最初に結合されます。複合項でない項や、括弧で囲まれた項の優先順位は0です。
左から結合するオペレ−タ(例えば+,-)では、右側に優先順位の低い引数がきます。式"a+b-c"は、"+"と"-"が左から結合するように定義されているので、"(a+b)-c"と解釈できます(yfx)。
右から結合するオペレ−タでは、左側の引数の主関数子が低い優先順位でなければなりません。"+"と"-"が右から結合する場合(xfy)には、"a+b-c"は、"a+(b-c)"と解釈されます。
xfxは、オペレ−タを結合できないように定義します。つまり、2つの引数中の両方のオペレ−タが、先頭のオペレ−タより低い優先順位にならなければなりません。項"a+b-c"は、"+"がxfxと定義されている場合には違法になります。つまり解釈できないということです。このような使い方は、構文エラ−になります。
括弧は、定義された優先順位を無視するために使われます。"+"は、"*"より高い優先順位ですが、括弧が"+"のオペレ−タを隠すため優先順位が0になり、項"(a+b)*c"は正しく解釈されます。
前置オペレ−タや後置オペレ−タも、同様です。
定義済みの演算子優先順位表
1200 xfx :- , -->
1200 fx ?- , :-
1100 xfy ;
1000 xfy ,
900 fy not
700 xfx is , =.. , @>= , @=< , @> , @<
700 xfx \= , \== , = , >= , =< , > , < , =\= ,
== , =:=
500 yfx - , + , /\ , \/
500 fx - , + , \
400 yfx // , / , * , div , << , >>
300 xfx mod
200 xfy ^
|