Prolog,基本案例失败的问题

时间:2018-05-18 18:55:24

标签: recursion search prolog

我目前正在编写prolog A *搜索功能,并遇到了我的一个查询问题。所以我决定手动测试基本情况,因为那是跟踪失败的地方。

addAChild([Child],[],[Child]):-
   write(woo empty).

我手动运行:

addAChild([c(1,1,p(1,2)),[]],[],A).

但它失败了。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

[Child](1个元素列表)无法与[c(1,1,p(1,2)),[]](2个元素列表)统一。

这就是它失败的原因。

您可以在交互式解释器中手动测试这两个术语无法统一:

?- addAChild([Child],[],[Child]) = addAChild([c(1,1,p(1,2)),[]],[],A).
false.

然后你可以递归地检查哪个部分失败了。

术语名称(addAChild)和arity(3)是相同的,因此我们可以排除此问题。

然后继续统一每个论点:

?- [Child] = A.
A = [Child].

?- [] = [].
true.

?- [Child] = [c(1,1,p(1,2)),[]].
false.