プロローグで作成されたエキスパート システムを持っているため、Java インターフェイスから実行すると問題が発生します。問題は、出力の通信に関連しています。Streams を試しましたが、(このプロジェクトでのみ) 正常に動作しません。txt ファイルの書き込み時にアプリケーションが明らかにフリーズします。次のようなことを行います。
myFunction(CurPlace, Place) :-
open('text.txt',write,Stream), nl(Stream),
write(Stream,'You cant go from '), write(Stream,CurPlace), write(Stream,' to '), write(Stream,Place), nl(Stream),close(Stream),
fail.
執筆の最後に、java で txt を読みました。すべての古いシステムで、このメソッドは正常に機能しましたが、これを使用すると、おそらく推論または再帰呼び出しのために、何か問題が発生します (Java 側、実行するとswiprolog から直接送信しても問題ありません)! そこで、jpl_get を使用して呼び出すことにしましたが、これは初めてです。助けが必要です!私のインターフェイスには、プロローグ システムからのすべての出力を出力する jtextarea があります。私はそれを「jTextAreaOUTPUT」と呼んでいます。このコンポーネントは私の Java クラス インターフェイスにあります。
私のプロジェクト フォルダーは (Windows の場合): "main_folder" で、内部には (すべての eclipse プロジェクトと同様に) src、bin があります。 /mypackage/interface.java jtextarea にサンプル メッセージ「Start Message」を出力するにはどうすればよいですか? 私はこれを試しました:
start:- jpl_get( 'src.mypackage.interface', jTextAreaOUTPUT, X),
jpl_call(X,append,['Start Message\n']).
...そして私のJavaアプリケーションでは、この方法でクエリを呼び出します:
public static void CallQuery(String t2){
Query q2 = new Query(t2);
try{
q2.hasSolution();
} catch (Exception e) {
}
}
t2 は、main() から呼び出すと「開始」です! そのため、実行すると、システムから「ClassNotFoundException」が返されます!
質問1)誰かが私が望むことをする良い例を教えてもらえますか?
質問 2) jpl get および call における変数 X の役割は何ですか?
質問 3) 変数を出力したい場合、どうすればよいですか?