After installing SWI-Prolog in my computer, I went on to try one of its examples, and found out this particular beauty:
run:
Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Program Files (x86)\swipl\bin\jpl.dll: Can't find dependent libraries
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1807)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1732)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1028)
at jpl.JPL.loadNativeLibrary(JPL.java:100)
at jpl.fli.Prolog.<clinit>(Prolog.java:85)
at jpl.Query.open(Query.java:286)
at jpl.Util.textToTerm(Util.java:162)
at jpl.Query.<init>(Query.java:198)
at main.ProjetoPLP.main(ProjetoPLP.java:12)
Java Result: 1
I've checked, and there is a jpl.dll file inside the aforementioned folder, so I'm not exactly sure what's going on here. I've checked older questions on this website, and the internets, but neither provided any sort of conclusive answer.
Anyone has any idea how to go about this?
EDIT:
Here is the code I'm trying to run, in case that helps.
package main;
import java.io.*;
import java.util.Hashtable;
import jpl.Query;
import org.apache.commons.io.*;
public class ProjetoPLP
{
private static void loadJPLDll() {
try {
InputStream in = ProjetoPLP.class.getResourceAsStream("/test/resources/jpl.dll");
File fileOut = new File("jpl.dll");
OutputStream out = FileUtils.openOutputStream(fileOut);
IOUtils.copy(in, out);
in.close();
out.close();
System.load(fileOut.getAbsolutePath());// loading goes here
} catch (Exception e) {
e.printStackTrace();
}
}
public static void
main(String args[] )
{
loadJPLDll();
String t1 = "consult('family.pl')";
Query q1 = new Query(t1);
System.out.println( t1 + " " + (q1.hasSolution() ? "succeeded" : "failed") );
//--------------------------------------------------
String t2 = "child_of(joe, ralf)";
Query q2 = new Query(t2);
System.out.println( t2 + " is " + (q2.hasSolution() ? "provable" : "not provable") );
//--------------------------------------------------
String t3 = "descendent_of(steve, ralf)";
Query q3 = new Query(t3);
System.out.println( t3 + " is " +(q3.hasSolution() ? "provable" : "not provable") );
//--------------------------------------------------
String t4 = "descendent_of(X, ralf)";
Query q4 = new Query(t4);
System.out.println( "first solution of " + t4 + ": X = " + q4.oneSolution().get("X"));
//--------------------------------------------------
Hashtable[] ss4 = q4.allSolutions();
System.out.println( "all solutions of " + t4);
for ( int i=0 ; i<ss4.length ; i++ ) {
System.out.println( "X = " + ss4[i].get("X"));
}
//--------------------------------------------------
System.out.println( "each solution of " + t4);
while ( q4.hasMoreSolutions() ){
java.util.Hashtable s4 = q4.nextSolution();
System.out.println( "X = " + s4.get("X"));
}
//--------------------------------------------------
String t5 = "descendent_of(X,Y)";
Query q5 = new Query(t5);
System.out.println( "each solution of " + t5 );
while ( q5.hasMoreSolutions() ){
java.util.Hashtable s5 = q5.nextSolution();
System.out.println( "X = " + s5.get("X") + ", Y = " + s5.get("Y"));
}
}
}