如果我定义了这个操作符:
op(700, yfx, sum).700:将优先考虑其他运营商。
yfx:快速显示参数的优先级,尊重运算符本身。这个配置表示操作符是infix,参数y具有操作优先级的<=优先级,参数x具有操作符优先级的优先级<。
最高优先级是热值的主要函子,这意味着最后要执行的操作。
因此,这意味着,如果我有以下评估:
9 sum 5 sum 7这意味着我有一个3,其中我首先评估5和7的值,然后我计算:9和(5和7)。
我对操作员优先级的推理正确吗?
发布于 2013-03-24 15:42:31
我认为措辞与你所用的不同:
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具有更高的优先级)。
对于预定义的系统操作符,请参阅文档页面。
https://stackoverflow.com/questions/15599042
复制相似问题