Debugging 如何调试Prolog程序
很抱歉用这个简单的问题来打扰你,但是我现在花了2个小时来解决这个问题,但没有成功。我最大的问题是我不知道如何调试Prolog程序,这限制了我理解为什么这不起作用的能力。因此,我的问题是,我如何在某种调试器或帮助工具的帮助下,找出该程序为什么不能给出预期的结果:Debugging 如何调试Prolog程序,debugging,prolog,Debugging,Prolog,很抱歉用这个简单的问题来打扰你,但是我现在花了2个小时来解决这个问题,但没有成功。我最大的问题是我不知道如何调试Prolog程序,这限制了我理解为什么这不起作用的能力。因此,我的问题是,我如何在某种调试器或帮助工具的帮助下,找出该程序为什么不能给出预期的结果: combinelists(L1|List1, L2|List2) :- write(L1), write(L2), nl, combinelists(List1, List2). printlist([
combinelists(L1|List1, L2|List2) :-
write(L1),
write(L2),
nl,
combinelists(List1, List2).
printlist([L1|List]) :-
write(L1),
nl,
printlist(List).
以下是我得到的输出:
1 ?- printlist([egg,egg2]).
egg
egg2
false.
2 ?- combinelists([egg,egg2],[egg3,egg4]).
false.
在上一个案例中,我期望的结果是:
鸡蛋3
EGG2EG4
错
我尝试在SWI prolog中打开跟踪,得到了以下结果。然而,这并不能回答为什么输出是空的。什么样的工具能帮我摆脱困境。如果你知道这个问题的解决方法,我也将非常感激
[trace] 5 ?- combinelists([egg,egg2],[egg3,egg4]).
Call: (6) combinelists([egg, egg2], [egg3, egg4]) ? creep
Fail: (6) combinelists([egg, egg2], [egg3, egg4]) ? creep
false.
[trace] 6 ?- printlist([egg,egg2]).
Call: (6) printlist([egg, egg2]) ? creep
Call: (7) write(egg) ? creep
egg
Exit: (7) write(egg) ? creep
Call: (7) nl ? creep
Exit: (7) nl ? creep
Call: (7) printlist([egg2]) ? creep
Call: (8) write(egg2) ? creep
egg2
Exit: (8) write(egg2) ? creep
Call: (8) nl ? creep
Exit: (8) nl ? creep
Call: (8) printlist([]) ? creep
Fail: (8) printlist([]) ? creep
Fail: (7) printlist([egg2]) ? creep
Fail: (6) printlist([egg, egg2]) ? creep
false.
[trace] 7 ?- combinelists([egg,egg2],[egg3,egg4]).
Call: (6) combinelists([egg, egg2], [egg3, egg4]) ? creep
Fail: (6) combinelists([egg, egg2], [egg3, egg4]) ? creep
false.
为了使列表至少与一个元素匹配,您应该使用
[H | T]
而不是H | T
。在你的第一句中,你遗漏了方括号。
–Tudor Berariu为了将列表与至少一个元素匹配,您应该使用
[H | T]
而不是H | T
。在你的第一句中,你漏掉了方括号。我爱你,@TudorBerariu!非常感谢你!调试器不可能帮我解决这个问题。如果你想理解Prolog,从没有副作用的程序开始。