prolog - 检查二维数组中每一行和每一列中的重复值
问题描述
我正在阅读有关游戏的 PDF 注释,Prolog
其中Hitori
我来到以下代码
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 代表二维数组及其初始值
-1 -1 -1 -1
-1 -1 -1 -1
-1 -1 -1 -1
-1 -1 -1 -1
以及P
每次都会改变它的值,所以它可以测试一个元素是否可以替换为zero
实际上我无法获得上面的代码,但我认为它会检查将元素更改为的验证zero
所以我的问题是上面的代码是做什么的?
解决方案
首先,ab
谓词的变量应该是C
not P
。
谓词将ab/1
整数方阵作为输入,格式为:
[[0, 4, 0], [2, 0, 8], [3, 6, 9]]
0
如果任何行或列中没有两个连续的 s,则返回 true 。这一定与 Hitori 规则有关:“黑色单元格不能相邻,尽管它们可以彼此对角线”。
推荐阅读
- amazon-web-services - 模板的输出块中未解决的资源依赖项 [BasicAWSApiGateway]
- python - Python:如何使用多个参数对我的函数进行多处理?
- asp.net-mvc - 通过 www 使用 AD B2C 登录时如何处理错误
- javascript - 如何在 Tilegram 十六进制地图中标记单个图块
- java - ElasticSearch SearchRequest 不返回必须匹配文档中的第一个元素
- python - 如何在图形栏中以零值绘制一条线?
- arrays - Nuxt+VueX 在子组件中存储绑定(通过迭代数组)
- excel - 将数据库导出到 XLS:它会忽略格式化?
- discord - 仅在所选频道中的特定命令
- vue.js - 使用 nuxt/content 显示从数据库中获取的 markdown