最後のルールが前のルールの結果に応じて望ましい結果を得る方法で、いくつかの連鎖ルールを実装しました。
rule1(X,Y) :-
pred1(X,Z),
pred1(Y,Z).
rule2(Z,T) :-
rule1(X,Y),
pred2(Z,X),
pred2(T,Y).
ルールごとに推論されたすべての事実を取得する必要があります。私はjplライブラリを使ってJavaからこれをやっています。
String stringFileQuery = "rule1(X,Y)";
System.out.println(stringFileQuery + " "
+ (Query.hasSolution(stringFileQuery) ? "succeeded" : "failed"));
Query fileQuery = new Query(stringFileQuery);
System.out.println("all solutions of " + stringFileQuery);
while (fileQuery.hasMoreSolutions()) {
Map<String, Term> s10 = fileQuery.nextSolution();
System.out.println("First -> " + s10.get("X") + ", Second ->" + 10.get("Y"));
}
Prolog であっても、これらすべての事実を取得するにはどうすればよいですか? 実際のプログラムでは、2 つ以上のルールがあります。