Prolog中的操作员优先级评估顺序

时间:2013-03-24 13:29:22

标签: prolog

如果我定义此运算符:

op(700, yfx, sum).

700:优先考虑其他运营商。

yfx: rappresent参数的优先级尊重运算符本身。该配置表示运算符是 infix ,并且参数y优先于< =到操作数优先级,并且参数x具有优先级<运营商优先权。

最高优先级是热量的主要函子,这意味着这是最后要执行的操作。

所以,这意味着如果我有以下评估:

9 sum 5 sum 7

所以这意味着我有三个,其中首先我估计5和7的值,然后我评估: 9 sum(5 sum 7)

我对运营商优先权的推理是否正确?

1 个答案:

答案 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页面。