0

私はjplを使ってjavaとprologを接続しています。Java でプロローグ リストを処理しようとしています。私のプロローグコードを実行すると、次のようなリストが返されます

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」であるリストの最初の要素を出力できます

同じように、リストのすべての要素を処理できません。これを行うのを手伝ってください。

4

2 に答える 2

0

私はこれまでこのAPIを使用したことがありませんが、Javadocをざっとjpl.Term見てみると、すべての結果を含むargs()配列()を取得するために呼び出すことができることがわかります。Term[]

あなたはそれらをループすることができます:

...
for (Term oneTerm : listTerm.args()) {
  System.out.println(oneTerm);
}

isCompound()オブジェクトモデルではnディープのネストが可能であるため、結果の完全なツリーを出力する場合は、各用語の...をチェックして再帰する必要があることにも注意してください。

于 2011-10-20T20:00:07.893 に答える