2012-04-26 6 views
2

Prologで述部を最小化する必要があります。現在、私はGNU Prolog Javaを使用しています。 私はこの事実 有限ドメインソルバーfd_minimize/2

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ソルバを持っていないという問題があると想定します。ヒント/回避策はありますか?

答えて

1

fd_minimize/2は、findall/3keysort/2という述語を提供するという同じ結果を達成できます。

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

Territoryに同じ値を提供

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

を置き換えることができます。非常によく似た名前を持つ2つの異なるシステムがあり

+1

ご返信ありがとうございます。 gnu prolog java実装はKeysortメソッドを提供せず、私はPrologのnoobですので、このコードを書きました: 'place_army(Player、Territory): - findall(X、army(_、X)、ソート(値、[Army | _])、 軍隊(Territory、Army)、 所有者(Player、Territory)、!。 – Otacon

+0

@Otacon:軍隊/ 2直後にカットを置いて維持する必要があります他の2つの試みと同等である。とにかく、noobには悪くない! – false

+0

あなたのヒントのために多くのThx:D(そして、 "noobのために悪くない"のためにたくさんありがとう):D 私はSWI-PROLOGに切り替えることにしました。それは少し重いですが、それは私の小さな開発に必要なものすべてを持っています:D しかし、まだ、あなたのサポートのためにたくさんの! – Otacon

2

GNUプロローグ(を参照)、この名前1999-04-19を採用し、先駆CLP(FD)実装とISO Prologシステムはactively developed –最も最近のバージョンは1時間前にリリースされました。 fd_minimize/2などはGNU Prologの一部です。

そして最新のバージョンが2010-08-15であるGNU Prolog for Javaと呼ばれる最近のシステムがあります。

おそらく、この名前の混乱を解決することができます。

+1

しかし、この作業をJavaで行うには、JNIインターフェイスを作成する必要があります。 – Otacon