Recursion 序言,基本案例失败的问题
我目前正在编写一个prolog a*搜索函数,在我的一个查询中遇到了一个问题。所以我决定手动测试基本情况,因为这就是跟踪失败的地方Recursion 序言,基本案例失败的问题,recursion,search,prolog,Recursion,Search,Prolog,我目前正在编写一个prolog a*搜索函数,在我的一个查询中遇到了一个问题。所以我决定手动测试基本情况,因为这就是跟踪失败的地方 addAChild([Child],[],[Child]):- write(woo empty). 我手动运行: addAChild([c(1,1,p(1,2)),[]],[],A). 但它只是失败了。 任何帮助都将不胜感激。[Child](单元素列表)不能与[c(1,1,p(1,2)),[]]统一起来。(双元素列表) 这就是它失败的原因 addAChil
addAChild([Child],[],[Child]):-
write(woo empty).
我手动运行:
addAChild([c(1,1,p(1,2)),[]],[],A).
但它只是失败了。
任何帮助都将不胜感激。[Child]
(单元素列表)不能与[c(1,1,p(1,2)),[]]统一起来。
(双元素列表)
这就是它失败的原因
addAChild([Child],[],[Child]):-
write(woo empty).
您可以在交互式解释器中手动测试这两个术语是否无法统一:
?- addAChild([Child],[],[Child]) = addAChild([c(1,1,p(1,2)),[]],[],A).
false.
然后,您可以递归地检查哪个部分出现故障
addAChild([Child],[],[Child]):-
write(woo empty).
术语名称(addAChild
)和算术数(3)是相同的,因此我们可以排除此问题
然后继续统一每个参数:
?- [Child] = A.
A = [Child].
?- [] = [].
true.
?- [Child] = [c(1,1,p(1,2)),[]].
false.
但是,如果它被定义为(Child,[],Child)是所需的输入,那么它是否仍然关心这两种输入的格式,以及使用第二种作为转储输出的方式?如果第一个参数可以与第三个参数统一,那么这种形式将成功地统一(在你的例子中,是的,因为第三个参数
A
是一个自由变量)。这就是促使我尝试在我的问题中提交的内容的原因,在这种格式中,它也失败了,我不理解为什么。对不起,我的错误,紧接着的一个书面陈述似乎使它失败。谢谢你的回答。