gpt4 book ai didi

prolog - SWI Prolog 水壶拼图

转载 作者:行者123 更新时间:2023-12-02 13:23:05 24 4
gpt4 key购买 nike

这是我第一次来这里,我知道已经有关于此的帖子,但似乎与我想象的编码方式不同。我只是一直得到错误的答案。

我输入:求解(0,0)。结果是假。

代码。

solve(5,_).
solve(X,Y):- X < 7,
\+ member((7,Y),L),
concat(E,[(X,Y)],L),
write('Fill 7 litre jug from tap.\n'),
solve(7,Y).
solve(X,Y):- Y < 4,
\+ member((X,4),L),
concat(E,[(X,Y)],L),
write('Fill 4 litre jug from tap.\n'),
solve(X,4).
solve(X,Y):- X+Y >= 7,
Y > 0,
Z is Y - (7 - X),
\+ member((7,Z),L),
concat(E,[(X,Z)],L),
write('Fill 7 litre jug with 4 litre jug.\n'),
solve(7,Z).
solve(X,Y):- X+Y >= 4,
X > 0,
Z is X - (4 - Y),
\+ member((Z,4),L),
concat(E,[(Z,Y)],L),
write('Fill 4 litre jug with 7 litre jug.\n'),
solve(Z,4).
solve(X,Y):- X+Y < 4,
Y > 0,
Z is X + Y,
\+ member((Z,0),L),
concat(E,[(Z,Y)],L),
write('Empty 4 litre jug into 7 litre jug.\n'),
solve(Z,0).
solve(X,Y):- X+Y < 7,
X > 0,
Z is X+Y,
\+ member((0,Z),L),
concat(E,[(X,Z)],L),
write('Empty 7 litre jug into 4 litre jug.\n'),
solve(0,Z).
solve(X,Y):- X > 0,
\+ member((0,Y),L),
concat(E,[(X,Y)],L),
write('Empty 7 litre jug.\n'),
solve(0,Y).
solve(X,Y):- Y > 0,
\+ member((X,0),L),
concat(E,[(X,Y)],L),
write('Empty 4 litre jug.\n'),
solve(X,0).

member(X,[X|L]).
member(X,[L|L]):-
member(X,L).

concat([],L,L).
concat([X|A],B,[X|L]):-
concat(A,B,L).

非常感谢任何帮助。谢谢。

最佳答案

我猜你想做一个简单的深度优先搜索具有循环避免功能。至少我拿了成员(member)支票作为对搜索中现有循环的检查。

现在您的代码用于谓词 solve/2 并且它内容如下:

[..]
solve(X,Y):- X+Y < 4,
Y > 0,
Z is X + Y,
\+ member((Z,0),L),
concat(E,[(Z,Y)],L),
write('Empty 4 litre jug into 7 litre jug.\n'),
solve(Z,0).
[..]

问题是你没有传递 L 和 E。当您咨询您的客户时,您还应该收到警告Prolog 文本,它可能会说 E 是单例变量。

我猜想一个使用谓词的解决方案solve/3相反,谓词 solve/2 效果会更好。你可以通过第三个中已经访问过的状态争论。代码如下所示:

[..]
solve(X,Y,L):- X+Y < 4,
Y > 0,
Z is X + Y,
\+ member((Z,0),L),
concat(E,[(Z,Y)],L),
write('Empty 4 litre jug into 7 litre jug.\n'),
solve(Z,0,E).
[..]

希望这有帮助。

再见

P.S.:concat/3不是必需的,只需说E = [(Z,0)|L],或完全消除 E 方程并仅修改调用主体中的solve/3 为solve(Z,0,[(Z,0)|L])

关于prolog - SWI Prolog 水壶拼图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20201529/

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