我已经用prolog创建了一个游戏(连续4个)。我的启发式函数要求我知道棋盘上每个可能的4行组合中有多少玩家和对手的筹码。我使用的方法如下(在psuedocodish中):
我有一个列表,上面列出了板子(ComboList) = form==> [[A,B,C,D]|Rest]
的所有可能的四个。我有一个列表,其中包括第一个玩家的所有移动(List1) = form==> [[1],[7],[14]]
,以及对手移动的一个列表(List2)。
步骤1:从ComboList获取第一个组合,2:检查所有的List1以查看此组合中有多少个,3:检查所有的List2以查看此组合中有多少个,从ComboList移动到下一个组合并重新开始...
这个过程花费了太多的运行时间来完成所需的工作。
有没有人能推荐一些更好、更有效的建议!非常感谢提前!
发布于 2014-07-11 20:35:07
下面的代码使用了成员/3,它也被称为nth1/3。请看这里:
http://storage.developerzen.com/fourrow.pro.txt
谓词现在可以在库(列表)中找到,并且可能具有本机支持或快速实现:
http://www.swi-prolog.org/pldoc/man?predicate=nth1/3
但我猜断言一些事实并依赖于参数索引可能会让你得到更好的结果。请看这里的示例:
http://www.mxro.de/applications/four-in-a-row
希望这能有所帮助。
再见
https://stackoverflow.com/questions/13037239
复制相似问题