0

我不确定在考试中如何回答这个问题:

让我们考虑这个 prolog 程序:

p(a,b).
p(b,c).
p(c,a).
q(X,X).
q(X,Y):-p(X,Z),q(Z,Y).

和问题:

?- q(X,X).

并且有效?答案是:

上述目标可以通过无数种方式实现,但没有一种是替代 X = b。

我不明白,真的。IMO 这个谓词可以通过 3 种方式完成:

 q(a,a) or  q(b,b) or  q(c,c).

我在这里不明白什么?或者也许答案是错误的,我只是浪费时间而我的答案是好的?

4

1 回答 1

1

q(X,X).规则匹配参数q相等的任何输入。您可以轻松地自己尝试一下:

?- [user].
|: q(X, X).
|: q(X, Y) :- p(X, Z), q(Z, Y).
|: % user://1 compiled 0.00 sec, 1,808 bytes
true.

?- q(b, b).
true.

?- q(X, X), X=b.
X = b.

代替b,您可以在最终查询中填写任何 Prolog 术语。(请注意,我什至没有输入p这里的定义;这无关紧要。)

于 2013-09-09T12:56:28.240 回答