我正在阅读Prolog
中Hitori
上的一个游戏的PDF注释,我看到了以下代码
abr([]).
abr([_]):-!.
abr([C, C|Cs]):- C \= 0, abr([C|Cs]).
abr([C1, C2|Cs]):- C1 \= C2, abr([C2|Cs]).
abs([]):- !.
abs([Cs|Css]):- abr(Cs), !, abs(Css).
ab(P):- transpose(C, Ccol), abs(C), abs(Ccol).
P
arg代表2D数组及其初始值
-1 -1 -1 -1
-1 -1 -1 -1
-1 -1 -1 -1
-1 -1 -1 -1
以及P
每次都会更改其值,因此它可以测试是否可以用zero
替换元素
实际上我无法获得以上代码,但我认为它会检查将元素更改为zero
的有效性
所以我的问题是上面的代码做什么?
答案 0 :(得分:0)
首先,ab
谓词的变量应为C
而不是P
。
ab/1
谓词采用以下形式的整数平方矩阵作为输入:
[[0, 4, 0], [2, 0, 8], [3, 6, 9]]
如果任何行或列中都没有两个连续的0
,则返回true。这一定与Hitori规则有关:“黑细胞不能相邻,尽管它们可以彼此成对角线。”