首页 > 解决方案 > Prolog,基本案例失败的问题

问题描述

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

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

我手动运行:

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

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

标签: recursionsearchprolog

解决方案


[Child](a 1-elements list) 不能与[c(1,1,p(1,2)),[]](a 2-elements list) 统一。

这就是它失败的原因。

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

?- 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.

推荐阅读