Prolog中的操作符优先级求值顺序

Prolog中的操作符优先级求值顺序,prolog,Prolog,如果我定义此运算符: op(700, yfx, sum). 700:rap表示尊重其他操作员的优先级 yfx:rap根据运算符本身显示参数的优先级。此配置表示运算符为中缀,且参数y具有优先级我认为措辞与您使用的不同: 700:优先权。较低的约束更严格 yfx:左侧的关联性 ?-编写规范(1和2和3)。生成和(和(1,2),3) 与算术二进制运算符一样,此运算符与左侧关联: ?- setof(X-O,current_op(X,yfx,O),L),pairs_keys_values(L,_,Os)

如果我定义此运算符:

op(700, yfx, sum).
700:rap表示尊重其他操作员的优先级


yfx:rap根据运算符本身显示参数的优先级。此配置表示运算符为中缀,且参数y具有优先级我认为措辞与您使用的不同:

700:优先权。较低的约束更严格

yfx:左侧的关联性

?-编写规范(1和2和3)。
生成
和(和(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|...].
注:括号是必需的(总和的优先级高于统一(=)/2)

有关预定义的系统操作员,请参见页面

?- 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).