很抱歉打扰这个简单的问题,但我现在花了2个小时才解决这个问题但没有成功。我最大的问题是我不知道如何调试Prolog程序,这限制了我理解为什么这不起作用的能力。因此,我的问题是,在某种调试器或帮助工具的帮助下,我如何能够弄清楚为什么这个程序没有给出预期的结果:
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.
我在上一个案例中期待的输出是: eggegg3 egg2egg4 假的。
我尝试在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.
答案 0 :(得分:0)
为了使列表与至少一个元素匹配,您应该使用[H|T]
而不是H|T
。在你的第一个条款中,你错过了方括号。
- Tudor Berariu