【发布时间】:2013-09-09 12:01:51
【问题描述】:
我不确定在考试中如何回答这个问题:
让我们考虑这个 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).
我在这里不明白什么?或者也许答案是错误的,我只是浪费时间而我的答案是好的?
【问题讨论】:
-
查询与其中一条规则相同,所以我认为“无限多路”是正确的。但是没有什么可以阻止替换
X=b。 -
但规则包含常量“a”、“b”和“c”,是的,规则与查询相同,因此 IMO 应该只有 3 个答案。无限的答案是如果 p(A,B) 和 p(B,C) 和 p(C,A) 那么 q(X,X) 会有无限多的答案......但这只是我的逻辑。也许不一样。
-
没有什么可以阻止
q(d,d)或q(e,e)被评估为真。只要两个参数相同,查询就会满足规则q(X,X)。 -
对,所以正确的答案应该是:“查询有无限多的结果”
-
问题是,当您发出查询
?- q(X,X).时会发生什么。不会产生q(b,b)。 Were you 发出查询?- q(b,b).或?- q(42,42).两者确实会成功;但这不是所要求的。
标签: prolog