列出Prolog中4x4板上的所有可能操作

use*_*472 5 prolog

如何(例如)一个玩家在4x4板(8个不同的中介)中执行某些操作后,如何列出所有可能的板?

中介应该是,例如:

([1,2,3,4,5,6,7,8])
Run Code Online (Sandbox Code Playgroud)

每次自动播放时都无法重复使用.

董事会应该像这个董事会

([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,-,-)
Run Code Online (Sandbox Code Playgroud)

每轮一名玩家将一个中介放在棋盘上直到它满了.

mat*_*mat 2

我假设你有一个像 的谓词board0_move_board/3,它是棋盘 B、移动 M 以及在 B 上进行移动 M 后生成的棋盘之间的三元关系。此外,我假设你有一个将board_move/2棋盘与移动关联起来的谓词这在棋盘上是可能的,并且在回溯时连续给出所有可能的移动。通过这些谓词,您可以获得所有可能的板:

findall(Board, (board_move(Board0, Move), board0_move_board(Board0, Move, Board)), Boards)
Run Code Online (Sandbox Code Playgroud)