gpt4 book ai didi

debugging - 如何调试 Prolog 程序

转载 作者:行者123 更新时间:2023-12-02 20:27:42 24 4
gpt4 key购买 nike

很抱歉用这个简单的问题打扰您,但我现在已经花了 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.

我在最后一种情况下期望的输出是:蛋蛋3蛋2蛋4错误。

我尝试在 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。在你的第一个子句中你错过了方括号。 – 都铎·贝拉留

关于debugging - 如何调试 Prolog 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27465594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com