(例如)一个玩家在4x4棋盘(带有8种不同的介子)中执行某些动作之后,如何列出所有可能的棋盘?
介子应该是,例如:
([1,2,3,4,5,6,7,8])
并且每次您自动播放一次都无法重复使用。
董事会应该像这样的董事会
([1,1,-,-],(1,2,-,-)...(1,3,-,-)(1,4,-,-)
[2,1,-,-],(2,2,-,-)...(2,3,-,-)(2,4,-,-)
[3,1,-,-],(3,2,-,-)...(3,3,-,-)(3,4,-,-)
[4,1,-,-],(4,2,-,-)...(4,3,-,-)(4,4,-,-)
每回合只有一名玩家将一只介子放到棋盘上,直到填满为止。
最佳答案
我假设您有一个像board0_move_board/3
这样的谓词,它是板B,移动M和在B上进行移动M之后的结果板之间的三元关系。此外,我假设您有一个谓词board_move/2
将一个板与该板上可能的移动相关联,并在回溯时相继给出所有可能的移动。有了这些谓词,您可以获得具有以下所有可能的功能板:
findall(Board, (board_move(Board0, Move), board0_move_board(Board0, Move, Board)), Boards)