我正在遭受这个 Prolog 谓词:board(Before,_,After)
.
whereBefore
是字符列表的列表,可以是“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
实际上这是围棋游戏的棋盘状态(本例为 5x5)。'c's 和 'd's 是空位。'a's 是白色的石头,'b's 是黑色的石头。始终将每个“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 的一些基本规则的人能实现这个谓词吗?非常感谢!