画一段序言

时间:2018-05-27 06:56:58

标签: prolog

我正在学习使用prolog和列表并应用trace命令并自己绘制纸质跟踪,但我不太清楚调试如何使用列表(如果没有列表)。我有以下示例程序。

p([X],X). 
p([X|L],Y):-p(L,Y). 
q([X,X]). 

我应用查询

p(V,2),q(V).

我得到的控制台宝贝就是这个

Call: (9) p(_612, 2) ? creep
Exit: (9) p([2], 2) ? creep
Call: (9) q([2]) ? creep
Fail: (9) q([2]) ? creep
Redo: (9) p(_612, 2) ? creep
Call: (10) p(_902, 2) ? creep
Exit: (10) p([2], 2) ? creep
Exit: (9) p([_900, 2], 2) ? creep
Call: (9) q([_900, 2]) ? creep
Exit: (9) q([2, 2]) ? creep
V = [2, 2] ;

然后循环到无穷大,但这对我来说无关紧要,因为我不知道如何得到V = [2,2]的解;

进行适当的替换,使它们统一,我得到文字p(V,2)

[X] = L
2 = X
[X | L] = V
[2 | L] = V

所以我想要的是知道V的值,所以我会[2,[2]],这可以转化为[2,2]?

然后我必须检查它是否统一的第二个文字q(V),所以它是一个有效的解决方案。这会是你的推理吗?

0 个答案:

没有答案