サーチ…


定義済み演算子

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は宣言を削除します。

  • :タイプの一つであるxfyfxfxxfyyfxfyまたはfx fファンクタとの位置を示しx及びy引数の位置を示します。 yはファンクタの優先順位より低いか等しい優先順位を持つ項を表し、 xは厳密に低い優先順位を表します。

    • プレフィックス: fxfy
    • インyfxxfx (非結合)、 xfy (右結合)、 yfx (左結合)
    • Postfix: xfyf

使用例:

:- 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