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

非常によく似た名前を持つ 2 つの異なるシステムがあります。

GNU Prolog ( を参照) は、先駆的な CLP(FD) 実装を備えた ISO Prolog システムで、1999 年 4 月 19 日にこの名前が採用され、活発開発されています。最新バージョンは 1 時間前にリリースされました。fd_minimize/2などは GNU Prolog の一部です。

そして、GNU Prolog for Javaと呼ばれる最近のシステムがあります。その最新バージョンは2010年 8 月 15 日のものです。

たぶん、このネーミングの混乱は解決できるでしょう。

于 2012-04-26T19:04:10.797 に答える
2

述語を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

于 2012-04-26T18:18:45.117 に答える