There is Projog which is a Prolog written in Java, but also provides a Prolog REPL:
Projog provides an implementation of the Prolog programming language
for the Java platform. /.../
Projog can be used as a stand-alone console application or embedded in
your Java applications as a Maven dependency.
projog.consultFile(new File("src/main/resources/test.pl"));
QueryStatement s1 = projog.createStatement("test(X,Y).");
s1.setTerm("X", new Atom("d"));
QueryResult r2 = s1.executeQuery();
while (r2.next()) {
System.out.println("Y = " + r2.getTerm("Y"));
}
or implementing predicates in Java:
public class SingleResultPredicateExample extends AbstractSingleResultPredicate {
@Override
public boolean evaluate(Term term1, Term term2) {
Atom upperCaseTerm1 = new Atom(getAtomName(term1).toUpperCase());
return term2.unify(upperCaseTerm1);
}
}
or:
private static class RetryablePredicate implements Predicate {
private final String[] split;
private final Term target;
private int idx;
RetryablePredicate(String[] split, Term target) {
this.split = split;
this.target = target;
}
@Override
public boolean evaluate() {
while (idx < split.length) {
target.backtrack();
String next = split[idx++];
if (target.unify(new Atom(next))) {
return true;
}
}
return false;
}
@Override
public boolean couldReevaluationSucceed() {
return idx < split.length;
}
}