我需要最小化Prolog中的谓词。目前我正在使用GNU Prolog Java。我有这个事实
army( Territory,X ).
它说给定的领土有X军队。现在我想找到给定玩家拥有的军队数量最少。所以我在写:
place_army( Player, Territory ):-
fd_maximize( army(Territory, X), X ),
owner( Player, Territory ).
口译员说:
java.lang.IllegalArgumentException:目标当前未激活
过了一会儿,我发现了问题:http://www.gprolog.org/manual/gprolog.html#htoc313我认为问题是解释器的 Java 实现没有 FD 求解器。任何提示/解决方法?
有两个不同的系统具有非常相似的名称:
GNU Prolog(参见gnu-prolog),一个具有开创性CLP(FD)实现的ISO Prolog系统,它采用了这个名称1999-04-19并且正在积极开发 - 最新版本是在一小时前发布的。 fd_minimize/2
等都是GNU Prolog的一部分。
然后是一个名为GNU Prolog for Java的最新系统,其最新版本是2010-08-15。
也许这种命名混乱可以解决。
您可以获得与fd_minimize/2
提供的findall/3
和keysort/2
谓词相同的结果。
findall(X-T,army(T,X),B),keysort(B,[MinX-Territory|Cs]),
可以替换
fd_minimize(army(Territory,X),X),
为Territory
提供相同的值。