处理Prolog中的列表列表(Go游戏)

时间:2013-11-09 12:48:58

标签: prolog artificial-intelligence

我正在遭受这个Prolog谓词:board(Before,_,After)

其中Before是字符列表的列表,“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]]

要获得After,首先代表Before,如下所示:

  ccccc
  aaaac
  abbac
  bdbac
  dbbac

实际上这是Go游戏的棋盘状态(这种情况是5x5)。 'c'和's'是空置空间。 'a是白色的石头,'b是黑色的石头。始终将每个'c'和'd'映射到'rr'。如果它是活着的话,将'a'映射到'ar',如果死了则将'a'映射到'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的一些基本规则能实现这个谓词吗?非常感谢!

0 个答案:

没有答案