GNU インタープリターで Java 経由で Prolog を使用しようとしていますが、大きな問題が 1 つあります。
変数に対してクエリを実行すると、常に変数の名前が返されます。
だからここにいくつかのコードがあります:
node(1,3,3).
node(2,14,1).
node(3,19,5).
node(4,10,7).
node(5,15,8).
connection(1,2).
connection(1,2).
connection(2,3).
connection(3,2).
connection(1,3).
connection(3,1).
connection(2,4).
connection(4,2).
connection(4,5).
connection(5,4).
connection(3,5).
connection(5,3).
connection(1,4).
connection(4,1).
route(ID1,ID2,List) :- route(ID1,ID2,List,[]).
route(ID1,ID2,[ID1,ID2],List) :- connection(ID1,ID2),
not(member(ID1,List)).
route(ID1,ID2,[ID1|ID1s],List) :- connection(ID1,ID3),
not(member(ID1,List)),
route(ID3,ID2,ID1s,[ID1|List]).
findPath(Sum,Result) :- route(1,1,Result),
X is Sum+1,
length(Result, X).
このコードは、GNU Prolog コンソールと SWIPL では問題なく動作しますが、Java では
VariableTerm lengthTerm = new VariableTerm("Length");
Term[] arg_list = {new IntegerTerm(5), lengthTerm };
CompoundTerm(AtomTerm.get("findPath"), arg_list);
CompoundTerm goalTerm = new CompoundTerm(AtomTerm.get("findPath"), arg_list);
Goal goal = interpreter.prepareGoal(goalTerm);
interpreter.runOnce(goalTerm);
System.out.println("Length: " + lengthTerm.dereference());
長さの結果は「長さ」です。したがって、メモリに保存された実際の結果はないと思います。次のようなことを試しif (rc == PrologCode.SUCCESS || rc == PrologCode.SUCCESS_LAST)
て NoAnswerException をキャッチすると、例外がスローされます。私に何ができる?私は何時間も前からその問題を解決しようとしています。助けてください:)