3

我需要最小化 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 求解器。任何提示/解决方法?

4

2 回答 2

3

有两个不同的系统具有非常相似的名称:

GNU Prolog(参见),一个 ISO Prolog 系统,具有开创性的 CLP(FD) 实现,在 1999 年 4 月 19 日采用了这个名称并且正在积极开发——最新版本在一小时前发布。fd_minimize/2这些都是 GNU Prolog 的一部分。

还有一个最近的系统,叫做GNU Prolog for Java——它的最新版本是2010-08-15

也许这种命名混乱可以解决。

于 2012-04-26T19:04:10.797 回答
2

您可以获得与fd_minimize/2提供findall/3keysort/2谓词相同的结果。

 findall(X-T,army(T,X),B),keysort(B,[MinX-Territory|Cs]),

可以代替

  fd_minimize(army(Territory,X),X),

为 提供相同的值Territory

于 2012-04-26T18:18:45.117 回答