prolog中的连词与分离优先权

时间:2015-03-15 12:39:28

标签: prolog

据我所知,连词优先于分离。

我们拥有以下知识库:

a(1).
a(2,3).
a(3,2).
a(4,5,3).
b.
b(1,2).
b(3).
c.

我们的目标是:

?- a(X,Y);b(Z),c,fail,d.

所以这就是问题所在: 我的老师说目标被分成4个子目标,通过连接连接:

(a(X,Y);b(Z)),
c,
fail,
d.

并且在执行此查询时我不会得到任何结果。 但是结合具有更高的优先权,对吧? 这个目标不应该被分成两个子目标(而不是四个),通过分离连接起来:

a(X,Y);
b(Z),c,fail,d.

所以现在我想知道谁是对的,谁错了。 有人可以解释一下吗?

**当我执行查询时,我实际上得到了结果。

1 个答案:

答案 0 :(得分:4)

我认为这个问题主要是由于“优先”这个词的使用过度造成的误解。

Prolog运算符由可扩展谓词op(+Precedence, +Type, :Name)定义,其中Precedence是0到1200之间的整数,Type指定关联性,Name给出实际运算符。< / p>

此表显示了一些预定义的运算符:

1100    xfy ;, |
1000    xfy ,

对于歇斯底里的葡萄干,<{>> 整数值Precedence表示运算符绑定更严格(即更高 >优先权。)

因此,析取运算符的优先级比连接运算符的优先级高,因为它的值Precedence更高。