0

この演算子を定義すると:

op(700, yfx, sum).

700: rappresent 優先順位は他のオペレーターを尊重します。

yfx: rappresent 演算子自体を尊重する引数の優先順位。この構成は、演算子が中置式であり、引数 y が演算子の優先度よりも <= 優先され、引数 x が演算子の優先度よりも <= 優先されることを示しています。

最も優先順位が高いのは、therms のプリンシパル ファンクターです。これは、実行される最後の操作であることを意味します。

したがって、次の評価がある場合は次のようになります。

9 sum 5 sum 7

したがって、最初に 5 合計 7 の値を評価し、次に次のように評価する 3 があることを意味します: 9 合計 (5 合計 7)

オペレーターの優先順位についての私の推論は正しいですか?

4

1 に答える 1

2

言葉遣いはあなたが使用しているものとは異なると思います:

700: 優先度。下限はより厳密にバインドします。

yfx: 左への結合性。

?- write_canonical(1 sum 2 sum 3).利回りsum(sum(1,2),3)

この演算子は、算術二項演算子のように、左に関連付けられます。

?- setof(X-O,current_op(X,yfx,O),L),pairs_keys_values(L,_,Os).
L = [250- (?), 400- (*), 400- (/), 400- (//), 400- (<<), 400- (>>), 400- (div), 400- (mod), ... - ...|...],
Os = [?, *, /, //, <<, >>, div, mod, rdiv|...].

オペレーターの関係を検査する実用的な方法は、統合によるものです。

?- (1 sum 2 sum 3) = (1 sum X).
false.

?- (1 sum 2 sum 3) = (X sum 3).
X = (1 sum 2).

括弧が必要であることに注意してください (合計は、単一化 (=)/2 よりも優先されます)。

事前定義された体系的な演算子については、ドキュメントページを参照してください。

于 2013-03-24T15:42:31.620 に答える