Prolog统一练习

时间:2013-09-09 12:01:52

标签: 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).

我在这里不明白?或者答案是错的,我只是浪费时间,答案很好?

1 个答案:

答案 0 :(得分: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.

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