我目前正在编写prolog A *搜索功能,并遇到了我的一个查询问题。所以我决定手动测试基本情况,因为那是跟踪失败的地方。
addAChild([Child],[],[Child]):-
write(woo empty).
我手动运行:
addAChild([c(1,1,p(1,2)),[]],[],A).
但它失败了。 任何帮助将不胜感激。
答案 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.