三目並べゲームの述語を書きたいと思います。これは、特定のプレーヤーとボードに対して可能な後継ボード構成を生成します。この入力を入力した後:
next_board([[x,o,x],[x,x,o],[o,e,e]],x,N).
出力は次のように表示されます。
N=[[x,o,x],[x,x,o],[o,e,e]];
N=[[x,o,x],[x,e,o],[o,x,e]];
N=[[x,o,x],[x,e,o],[o,e,x]];
三目並べゲームの述語を書きたいと思います。これは、特定のプレーヤーとボードに対して可能な後継ボード構成を生成します。この入力を入力した後:
next_board([[x,o,x],[x,x,o],[o,e,e]],x,N).
出力は次のように表示されます。
N=[[x,o,x],[x,x,o],[o,e,e]];
N=[[x,o,x],[x,e,o],[o,x,e]];
N=[[x,o,x],[x,e,o],[o,e,x]];
可能な後続ボードを生成するには、基本的に、単一の空のセル(でマークされているe
)をプレーヤーチップで「置き換える」必要があります。
一見すると、select / 4を使用したくなるかもしれませんが、それは、連続するすべての空のセルをプレーヤーチップに置き換えます。append/3
したがって、次のような述語を使用する方がよい場合があります。
next_board(Board, Player, NextBoard):-
append(Head, [Row|Tail], Board), % Take a single row from the board
append(RowHead, [e|RowTail], Row), % Take a single empty cell
append(RowHead, [Player|RowTail], NRow), % and replace it with your player chip
append(Head, [NRow|Tail], NextBoard). % Now build a next possible board
を使用せずに同じロジックを実現するために、再帰的なプロシージャを作成することもできますappend/3
。