1

我在序言中创建了一个游戏(连续 4 个)。我的启发式函数要求我知道棋盘上每个可能的 4 行组合中有多少玩家和对手的筹码。我使用的方法如下(伪代码):

我有 1 个列表,列出了所有可能的棋盘 (ComboList) = 的形式 ==> [[A,B,C,D]|Rest]。我有 1 个第一个玩家 (List1) = 形式 ==> 的所有动作的列表,[[1],[7],[14]] 还有 1 个用于对手动作的列表 (List2)。

步骤 1:从 ComboList 中获取第一个组合,2:检查所有 List1 以查看此组合中有多少个,3:检查所有 List2 以查看此组合中有多少个,从 ComboList 移动到下一个组合并重新开始...

这个过程需要太多的运行时间来满足需要。

请有人可以提出更好,更有效的建议!非常感谢提前!

4

1 回答 1

0

下面的代码使用 member/3,它也被称为 nth1/3。看这里:

 http://storage.developerzen.com/fourrow.pro.txt

现在可以在 library(lists) 中找到谓词,并且可能具有本机支持或快速实现:

 http://www.swi-prolog.org/pldoc/man?predicate=nth1/3

但我想断言一些事实并依靠参数索引可能会让你得到更好的结果。例如,请参见此处:

 http://www.mxro.de/applications/four-in-a-row

希望这可以帮助。

再见

于 2014-07-11T12:35:06.863 回答