K-Prolog Compiler Version 6.0 
X+Y*Z と X+(Y*Z)
は共に、'+'(X,'*'(Y,Z)) をあらわします。(X+Y)*Z は異なった項となります。
2つの演算子が同じ優先順位を持つときに、あいまいさを解決するために、
演算子指示子を使います。演算子指示子は演算子の結合性に対応するものです。
演算子指示子は、
[例]
"+"、"-"の演算子指示子は yfxなので、
X+Y-Z は、'-'('+'(X,Y),Z)
":-"の演算子指示子は、fxなので、
f:-g:-h は、不正
ユーザが新しく演算子を定義するには、op 組込み述語を使います。
op(優先順位,演算子指示子,関数子名)
同じ関数子名に対しては、前置、中置、後置のそれぞれについて、1つの演算子指示子
を指定できますが、優先順位は異なっていてはならず、常に最後に実行された
op 述語で指定された値をとります。
現在の演算子を知るためには、 current_op(優先順位,演算子指示子,関数子名) という組込み述語を使うことができます。
K-Prologを起動したときには、次ページの表の演算子が定義されています。
| 演算子 | 指示子 | 優先順位 |
|---|---|---|
| :- | xfx | 1200 |
| :- | fx | 1200 |
| ?- | fx | 1200 |
| module | fy | 1150 |
| mode | fx | 1150 |
| public | fx | 1150 |
| ; | xfy | 1100 |
| ; | fy | 1100 |
| -> | xfy | 1050 |
| | | xfx | 1010 |
| , | xfy | 1000 |
| not | fy | 900 |
| \+ | fy | 900 |
| = | xfx | 700 |
| /= | xfx | 700 |
| \= | xfx | 700 |
| is | xfx | 700 |
| =.. | xfx | 700 |
| == | xfx | 700 |
| =/= | xfx | 700 |
| =\= | xfx | 700 |
| =:= | xfx | 700 |
| /== | xfx | 700 |
| \== | xfx | 700 |
| > | xfx | 700 |
| < | xfx | 700 |
| =< | xfx | 700 |
| >= | xfx | 700 |
| @> | xfx | 700 |
| @< | xfx | 700 |
| @=< | xfx | 700 |
| @>= | xfx | 700 |
| spy | fy | 500 |
| nospy | fy | 500 |
| edit | fy | 500 |
| editp | fy | 500 |
| listing | fy | 500 |
| listp | fy | 500 |
| listh | fy | 500 |
| where_is | fy | 500 |
| help | fy | 500 |
| more | fx | 500 |
| cd | fy | 500 |
| + | yfx | 500 |
| + | fx | 500 |
| - | yfx | 500 |
| - | fx | 500 |
| and | yfx | 500 |
| /\ | yfx | 500 |
| or | yfx | 500 |
| \/ | yfx | 500 |
| ../ | fy | 500 |
| ./ | fy | 500 |
| ~/ | fy | 500 |
| * | yfx | 400 |
| * | fx | 400 |
| / | yfx | 400 |
| / | fy | 400 |
| << | yfx | 400 |
| >> | yfx | 400 |
| mod | xfx | 300 |
| ** | xfy | 250 |
| ~ | fx | 200 |
| ^ | xfy | 200 |
| . | yfx | 200 |