如何在java中处理prolog列表
我正在使用jpl连接java和prolog。我正在尝试用java处理prolog列表。我的prolog代码在执行时返回如下列表如何在java中处理prolog列表,java,prolog,jpl,Java,Prolog,Jpl,我正在使用jpl连接java和prolog。我正在尝试用java处理prolog列表。我的prolog代码在执行时返回如下列表 L = [38, '(60)', '48^10', '36^6^58'] 现在,我尝试使用以下代码在java中处理这个输出 import jpl.Integer; import jpl.Query; import jpl.Variable; import jpl.JPLException; import jpl.Term; import java.awt.List;
L = [38, '(60)', '48^10', '36^6^58']
现在,我尝试使用以下代码在java中处理这个输出
import jpl.Integer;
import jpl.Query;
import jpl.Variable;
import jpl.JPLException;
import jpl.Term;
import java.awt.List;
import java.lang.Number;
import java.util.Hashtable;
import java.util.Iterator;
public class Family
{
int num1;
public static void main( String argv[] )
{
String t1 = "consult('Test.pl')";
Query q1 = new Query(t1);
System.out.println( t1 + " "
+ (q1.hasSolution() ? "succeeded" : "failed") );
String t4 = "main(X)";
Query q4 = new Query(t4);
System.out.println( "first solution of " + t4 + ": X = "
+ q4.oneSolution().get("X"));
Term listTerm = (Term) q4.oneSolution().get("X");
Term firstListItem = listTerm.arg(1);
System.out.println("" + firstListItem);
}
}
执行此操作,我们将得到查询的第一个解决方案,即
X = '.'(38, '.'('(60)', '.'('48^10', '.'('36^6^58', []))))
38
我可以打印出列表中的第一个元素是'38'
同样,我无法处理列表中的所有元素。请帮助我完成此操作?我以前从未使用过此API,但请快速查看一下显示,您可以调用它来获取包含所有结果的数组项[] 您可以循环浏览以下内容:
...
for (Term oneTerm : listTerm.args()) {
System.out.println(oneTerm);
}
还请注意,对象模型允许n深度嵌套,因此如果要打印完整的结果树,则需要递归,检查每个术语的isCompound…您可以定义如下方法
private static String lista(Term listTerm) {
String lista="";
while(listTerm.arity() == 2){
lista = lista + listTerm.arg(1);
listTerm = listTerm.arg(2);
}
return lista;
}
您可以在数组中使用,而不是列表我已经尝试使用Term[],但是如何显示所有参数。使用for循环,我只能显示第一个参数。