我正在用 Visual Prolog 编写一个填字游戏程序。卡在获得所有可能的 4 张元素集的那一刻。所有 4 个列表的长度都不同。有必要从每个列表中接收一组 4 个元素,然后使用另一个谓词执行我需要的检查。因此,您需要浏览这些表格的所有组合。
例如,我们有 3 个列表,我们需要获取 3 个元素的集合:[1, 2, 3], [4, 5], [6, 7, 8]:
1, 4, 6;
1, 4, 7;
1, 4, 8;
1, 5, 6;
1, 5, 7;
1, 5, 8;
2, 4, 6;
等等
迭代一个列表的元素并不难,但我不知道如何迭代 4 个列表。也许以某种方式使用内置的 list:: 谓词?请帮帮我。也许有一些想法?
我使用谓词在“经典 Prolog”中给出了一个解决方案(据我所知,
member/2在Visual PrologisMember()中,有一种方法可以做同样的事情)。member/2适用于“第一个参数是未绑定变量,第二个参数是绑定变量”(4 个列表之一)的情况,并且有n解决方案,其中n是该列表的长度。fail生成一个返回值,因此所有member/2-targets 开始从列表中生成所有解决方案,从 c 开始member(Е4, List4),以 . 结尾member(Е1, List1)。用尽所有组合后,Prolog继续执行第二句并成功完成计算。
这样做的目的
once(callN(Goal, E1, E2, E3, E4)),只是让您的代码处理一组“由另一个谓词测试”的 4 个元素。