使用Prolog的交互式游戏,你能解决它吗?:)

使用Prolog的交互式游戏,你能解决它吗?:),prolog,Prolog,我正在做一项任务,开发谓词来帮助玩下面概述的两人游戏 问题 双人游戏是用一组相同的石头排列成若干堆来进行的。可以有任意数量的石头和任意数量的堆。这个游戏中的一个移动包括从一堆中移除任意数量的石头,或者从两堆中移除相同数量的石头。这个游戏的输家是捡起最后一块石头的玩家 e、 g 大小为3,2,1的三堆,有10种可能的移动,导致以下状态: Take from first heap only: [2,2,1],[1,2,1],[2,1] Taking from 2nd heap only: [3,1,

我正在做一项任务,开发谓词来帮助玩下面概述的两人游戏

问题

双人游戏是用一组相同的石头排列成若干堆来进行的。可以有任意数量的石头和任意数量的堆。这个游戏中的一个移动包括从一堆中移除任意数量的石头,或者从两堆中移除相同数量的石头。这个游戏的输家是捡起最后一块石头的玩家

e、 g 大小为3,2,1的三堆,有10种可能的移动,导致以下状态:

Take from first heap only: [2,2,1],[1,2,1],[2,1]
Taking from 2nd heap only: [3,1,1],[3,1]
Taking from the 3rd heap only: [3,2]
Taking from the 1st and 2nd heaps: [2,1,1], [1,1]
Taking from the 1st and 3rd heaps: [2,2]
Taking from the 2nd and 3rd heaps: [3,1]

[3,1] occurs twice because there are three different ways of reaching it in one move.
任务1

创建一个谓词移动(S1,S2),它在回溯时返回一次移动中可以从S1到达的所有状态S2

到目前为止,我们拥有的

change([_|T],T).

change([H|T],[H1|T]):-
between(1,H,W),
H1 is H-W,
W<H.

change([H|T],[H|T1]):-
change(T,T1).

change2([H|T],[H1|T1]):-
between(0,H,W),
H1 is H-W,
W<H,
change(T,T1).
change([u124; T],T)。
变化([H | T],[H1 | T]):-
在(1,H,W)之间,
H1是H-W,
W