我一直在阅读我上一个问题的答案和评论,并尝试将给定的解释应用于 Bratko 的一个示例(Prolog Programming for Artificial Intelligence,第 130 页),但我不确定我是否完全理解它。该示例描述如下:
我阅读了树和代码如下:
在目标列表中C :- P, Q, R, !, S, T, U.,Prolog 会像往常一样一一尝试实例化变量,最终达到true.. 假设为Pand找到了一个值Q,并且第一次尝试R失败,那么 Prolog 可以回溯到找到 and 的情况P,Q并尝试另一个选项(R如果可用)。但是,如果R也找到(导致P, Q, R = true.),并且!一如既往地成功,我们会丢弃任何选择点,并且从该点开始(甚至没有C :- V.)没有任何东西可以回溯。这意味着如果找不到 的结果S,目标C :- P, Q, R, !, S, T, U.将立即失败。但是Prolog 仍然可以回溯到A :- B, C, D.找到 的其他值B。如果找到另一个匹配项B,C将重新尝试。等等。
假设我的解释是正确的,如果目标C :- P, Q, R, !, S, T, U.成功或失败而不管 的值B,你将如何提高效率?我的猜测是重写A :- B, C, D.为A :- B, !, C, D.
我的解释正确吗?考虑到一些先验信息,我的效率提高又如何C呢?
