Prolog Language
演算子
サーチ…
定義済み演算子
ISO / IEC 13211-1および13211-2に準拠する事前定義済み演算子:
優先度 | タイプ | オペレーター | つかいます |
---|---|---|---|
1200 | xfx | :- --> | |
1200 | FX | :- ?- | 指令、問い合わせ |
1100 | xfy | ; | |
1050 | xfy | -> | |
1000 | xfy | ',' | |
900 | fy | \+ | |
700 | xfx | = \\= | 期間統一 |
700 | xfx | == \\== @< @=< @> @>= | 期間比較 |
700 | xfx | =.. | |
700 | xfx | is =:= =\= < > =< >= | 算術評価と比較 |
600 | xfy | : | モジュールの資格 |
500 | yfx | + - /\ \/ | |
400 | yfx | * / div mod // rem << >> | |
200 | xfx | ** | フロートパワー |
200 | xfy | ^ | 可変の定量、整数の力 |
200 | fy | + - \ | 算術アイデンティティ、否定;ビットごとの補数 |
多くのシステムでは、実装固有の拡張機能として、さらに演算子が用意されています。
優先度 | タイプ | オペレーター | つかいます |
---|---|---|---|
1150 | FX | dynamic multifile discontiguous initialization | 標準指令 |
1150 | FX | mode public volatile block meta_predicate | |
900 | fy | spy nospy |
オペレータ宣言
Prologでは、カスタム演算子はop/3
を使用して定義できます。
op(+Precedence, +Type, :Operator)
演算子を優先順位付きの型の演算子として宣言します。演算子は、リストのすべての要素が同じ演算子であると宣言されている場合は、名前のリストにすることもできます。
優先順位は0〜1200の整数で、0は宣言を削除します。
:タイプの一つである
xf
、yf
、xfx
、xfy
、yfx
、fy
またはfx
f
ファンクタとの位置を示しx
及びy
引数の位置を示します。y
はファンクタの優先順位より低いか等しい優先順位を持つ項を表し、x
は厳密に低い優先順位を表します。- プレフィックス:
fx
、fy
- イン
yfx
:xfx
(非結合)、xfy
(右結合)、yfx
(左結合) - Postfix:
xf
、yf
- プレフィックス:
使用例:
:- op(900, xf, is_true).
X_0 is_true :-
X_0.
クエリ例:
?- dif(X, a) is_true.
dif(X, a).
ターム発注
2つの用語は、標準的な順序で比較することができます。
変数@ <numbers @ <atoms @ <strings @ <structures @ <lists
ノート:
構造はまずファンクタによってアルファベット順に比較され、次にアーリティによって、最後に各引数の比較によって比較されます。
リストの長さを比較し、次に各要素を比較します。
注文オペレータ | もし成功すれば |
---|---|
X @ <Y | Xは標準よりもYより小さい |
X @> Y | Xは標準よりもYより大きい |
X = <Y | Xは標準次数でYより小さいか等しい |
X @> = Y | Xは標準オーダーでY以上 |
クエリ例:
?- alpha @< beta.
true.
?- alpha(1) @< beta.
false.
?- alpha(X) @< alpha(1).
true.
?- alpha(X) @=< alpha(Y).
true.
?- alpha(X) @> alpha(Y).
false.
?- compound(z) @< compound(inner(a)).
true.
長期均等
等価演算子 | もし成功すれば |
---|---|
X = Y | XはYで統一できます |
X \ = Y | XとYを統一することはできません |
X == Y | XとYは同一です(つまり、可変バインディングが発生しないで統合されます) |
X \ == Y | XとYは同一ではない |
X =:= Y | XとYは算術的に等しい |
X = \ = Y | XとYは算術的に等しくない |
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow