如果我定义此运算符:
op(700, yfx, sum).
700:优先考虑其他运营商。
yfx: rappresent参数的优先级尊重运算符本身。该配置表示运算符是 infix ,并且参数y优先于< =到操作数优先级,并且参数x具有优先级<运营商优先权。
最高优先级是热量的主要函子,这意味着这是最后要执行的操作。
所以,这意味着如果我有以下评估:
9 sum 5 sum 7
所以这意味着我有三个,其中首先我估计5和7的值,然后我评估: 9 sum(5 sum 7)
我对运营商优先权的推理是否正确?
答案 0 :(得分: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)。
对于预定义的系统操作员,请参阅doc页面。