Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Recursion 序言,基本案例失败的问题_Recursion_Search_Prolog - Fatal编程技术网

Recursion 序言,基本案例失败的问题

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

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

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
是一个自由变量)。这就是促使我尝试在我的问题中提交的内容的原因,在这种格式中,它也失败了,我不理解为什么。对不起,我的错误,紧接着的一个书面陈述似乎使它失败。谢谢你的回答。