我想为井字游戏编写一个谓词,为给定的玩家和棋盘生成可能的后继棋盘配置。输入此输入后:
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
.