在Prolog中处理列表列表(围棋游戏)

在Prolog中处理列表列表(围棋游戏),prolog,artificial-intelligence,Prolog,Artificial Intelligence,我正遭受这样的序言谓词的折磨:board(Before,\uu,After) 其中之前的是字符列表,可以是“a”、“b”、“c”或“d”(列表中的列表长度相同)。例如: [[c,c,c,c,c],[a,a,a,a,c],[a,b,b,a,c],[b,d,b,a,c],[d,b,b,a,c]] 要在之后获得,请首先在之前表示,如下所示: ccccc aaaac abbac bdbac dbbac 实际上,这是围棋游戏的棋盘状态(本例为5x5)。c和d是空位。“a”是白色的石

我正遭受这样的序言谓词的折磨:
board(Before,\uu,After)

其中之前的
是字符列表,可以是“a”、“b”、“c”或“d”(列表中的列表长度相同)。例如:

[[c,c,c,c,c],[a,a,a,a,c],[a,b,b,a,c],[b,d,b,a,c],[d,b,b,a,c]]
要在之后获得,请首先在之前表示,如下所示:

  ccccc
  aaaac
  abbac
  bdbac
  dbbac
实际上,这是围棋游戏的棋盘状态(本例为5x5)。c和d是空位。“a”是白色的石头,“b”是黑色的石头。始终将每个“c”和“d”映射到“rr”。将“a”映射到“ar”(如果它是活的),映射到“ad”(如果它是死的)。类似地,对于“b”。在这种情况下,

?- board([[c,c,c,c,c],[a,a,a,a,c],[a,b,b,a,c],[b,d,b,a,c],[d,b,b,a,c]],_,After).
After = [[rr,rr,rr,rr,rr],[ar,ar,ar,ar,rr],[ar,br,br,ar,rr],[br,rr,br,ar,rr],[rr,br,br,ar,rr]]

实际上,我已经尝试使用DFS来解决这个问题,但失败了。知道Prolog和Go的一些基本规则的人能实现这个谓词吗?非常感谢

围棋中什么是“死”什么是“活”。。。你应该在这里寻求编码方面的帮助,而不是游戏规则的理解。在围棋中,如果一个形状有两只眼睛(另一种颜色不能在其中打两个洞),那么它就被认为是活的,如果它不能创造两只眼睛,那么它就被认为是死的。形状往往是不确定的。我不知道人们是否真的会把石头说成是活的还是死的。(我对围棋非常缺乏经验)。