如何在prolog中修剪以防止子节点再次生成它的父节点

时间:2012-05-24 13:18:52

标签: prolog

假设我有一个搜索树,我正在尝试找到目标的所有解决方案。如果我不修剪树,使得孩子仍然被允许生成它的父节点,则搜索空间变得非常大。那么有人可以告诉我一个这样做的谓词,或者向我解释如何做到这一点,因为我对Prolog很新。

1 个答案:

答案 0 :(得分:2)

最简单的方法可能是为你的“搜索”谓词添加一个额外的参数,该谓词跟踪已经访问过的节点(父,子等),以及禁止访问前一个节点的子句。

有些术语值得清理。树是没有循环(循环)的图形,因此在“搜索树”中,您实际上没有可能重新访问节点两次。

可能你正在寻找某种目标的路径,而解决方案是可能的路径。找到“目标的所有解决方案”的所述要求处于某种紧张状态,排除那些不止一次重新访问节点的路径。但是,我们假设允许不重新访问节点的限制。

如果您提供了更多编码搜索谓词的方式,我将能够具体说明如何添加额外的“已访问列表”参数。