首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prolog中的算子优先级求值顺序

Prolog中的算子优先级求值顺序
EN

Stack Overflow用户
提问于 2013-03-24 13:29:22
回答 1查看 446关注 0票数 0

如果我定义了这个操作符:

代码语言:javascript
复制
op(700, yfx, sum).

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

yfx:快速显示参数的优先级,尊重运算符本身。这个配置表示操作符是infix,参数y具有操作优先级的<=优先级,参数x具有操作符优先级的优先级<。

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

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

代码语言:javascript
复制
9 sum 5 sum 7

这意味着我有一个3,其中我首先评估5和7的值,然后我计算:9和(5和7)

我对操作员优先级的推理正确吗?

EN

回答 1

Stack Overflow用户

发布于 2013-03-24 15:42:31

我认为措辞与你所用的不同:

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

yfx:左联想。

?- write_canonical(1 sum 2 sum 3).产生sum(sum(1,2),3)

此运算符与左关联,就像算术二进制运算符一样:

代码语言:javascript
复制
?- 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|...].

统一是检验经营者关系的一种切实可行的方法。

代码语言:javascript
复制
?- (1 sum 2 sum 3) = (1 sum X).
false.

?- (1 sum 2 sum 3) = (X sum 3).
X = (1 sum 2).

注意括号是必需的(和比统一(=)/2具有更高的优先级)。

对于预定义的系统操作符,请参阅文档页面。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15599042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档