Я реализовал несколько правил цепочки таким образом, чтобы последнее правило получало желаемый результат в зависимости от результата предыдущих.
rule1(X,Y) :-
pred1(X,Z),
pred1(Y,Z).
rule2(Z,T) :-
rule1(X,Y),
pred2(Z,X),
pred2(T,Y).
Мне нужно получить каждый факт, который был выведен для каждого из правил. Я делаю это с Java, используя библиотеку jpl.
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"));
}
Как я могу получить все эти факты даже на Прологе? В реальной программе у меня больше двух правил.
rule1(X,Y) :- pred1(X,Z), pred1(Y,Z).
иrule2(Z,T) :- rule1(X,Y), pred2(Z,X), pred2(T,Y).
? - person SQB   schedule 21.06.2016rule1(X,Y)
, вы хотели бы видетьpred1(X,Z), pred1(Y,Z)
, а если проверяетеrule2(Z,T)
, вы хотели бы видетьpred1(X,Z), pred1(Y,Z), pred2(Z,X), pred2(T,Y)
? - person SQB   schedule 21.06.2016pred1(X, Y)
, поэтому я ожидаю вывода ...; Я вставилpred2(Z,T)
, поэтому ожидаю вывода ...? - person SQB   schedule 21.06.2016