我需要最小化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求解器。任何提示/解决方法?
答案 0 :(得分:2)
有两个不同的系统名称非常相似:
GNU Prolog(参见gnu-prolog),这是一个ISO Prolog系统,具有开创性的CLP(FD)实现,采用此名称1999-04-19并且actively developed - 最新版本已发布一小时前。 fd_minimize/2
等等是GNU Prolog的一部分。
最近有一个名为GNU Prolog for Java的系统 - 其最新版本来自2010-08-15。
也许这个命名混乱可以解决。
答案 1 :(得分:1)
您可以获得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
提供相同的值。