1

我一直在阅读我上一个问题的答案和评论,并尝试将给定的解释应用于 Bratko 的一个示例(Prolog Programming for Artificial Intelligence,第 130 页),但我不确定我是否完全理解它。该示例描述如下:

布拉特科页。 130

我阅读了树和代码如下:

在目标列表中C :- P, Q, R, !, S, T, U.,Prolog 会像往常一样一一尝试实例化变量,最终达到true.. 假设为Pand找到了一个值Q,并且第一次尝试R失败,那么 Prolog 可以回溯到找到 and 的情况PQ并尝试另一个选项(R如果可用)。但是,如果R也找到(导致P, Q, R = true.),并且!一如既往地成功,我们会丢弃任何选择点,并且从该点开始(甚至没有C :- V.)没有任何东西可以回溯。这意味着如果找不到 的结果S,目标C :- P, Q, R, !, S, T, U.将立即失败。但是Prolog 仍然可以回溯到A :- B, C, D.找到 的其他值B。如果找到另一个匹配项BC将重新尝试。等等。

假设我的解释是正确的,如果目标C :- P, Q, R, !, S, T, U.成功或失败而不管 的值B,你将如何提高效率?我的猜测是重写A :- B, C, D.A :- B, !, C, D.

我的解释正确吗?考虑到一些先验信息,我的效率提高又如何C呢?

4

1 回答 1

1

是的,你的理解是正确的。为了更好地理解它,我们可以将谓词重写为

a = (b & c & d)
c = (p & q & r) ~~>! (s & t & u) ; v

从这个答案中使用&for&&:和其他运算符(或者如果不清楚,请将其视为伪代码,通过的解决方案不超过一个)。当达到切割时,提交,但仍然可以回溯。~~>!ca

无论 的值如何,如果Cin成功或失败,您还可以将目标重新排序为A :- B, C, D.B

A :- C, B, D.

切入A :- B, !, C, D.切,它只让B成功一次,但如果你对它的第二个结果感兴趣怎么办?红色削减改变了谓词的含义。

于 2016-12-06T16:53:44.247 回答