0

三目並べゲームの述語を書きたいと思います。これは、特定のプレーヤーとボードに対して可能な後継ボード構成を生成します。この入力を入力した後:

 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]];
4

1 に答える 1

0

可能な後続ボードを生成するには、基本的に、単一の空のセル(でマークされている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

于 2012-10-30T13:21:29.840 に答える