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 回答