7

Prologで**/2( xfx) と(^)/2( )の引数の優先順位が同じでないのはなぜですか?xfy

これにより、次のような小さな矛盾が生じます。

?- X = 1, Y is 1 ^ -X.
X = Y, Y = 1.

と:

?- Y is 1 ** -1.
Y = 1.

しかし:

?- X = 1, Y is 1 ** -X.
ERROR: Syntax error: Operator priority clash
ERROR: X = 1, Y is 1 *
ERROR: ** here **
ERROR: * -X .
4

3 に答える 3

2

@false最初の質問に答えました。

あなたが与える例は、次の違いによるものです。

?- integer(-1).
true.

?- X = 1, integer(-X).
false.

および次の優先順位:

?- current_op(X, xfx, **).
X = 200.

?- current_op(X, fy, -).
X = 200.
于 2014-12-11T06:51:45.570 に答える