2016-11-06 101 views
1

我是一个prolog-noob,并且在java中有一个prolog-list的问题。Java中的Prolog列表与JPL

的Prolog:

event( 'Number1', 
    54.320021, 
    13.043840, 
    [sport,hotel,schwimmen,sauna]). 
event( 'Number2', 
    54.320678, 
    13.046984, 
    [einkaufen]). 


findAllCategories(Categories):- 
    findall(X, event(_,_,_,X), L), 
    appendCategories(C1,L), 
    Categories = C1. 

appendCategories(C1,[R|[]]):- 
    C1 = R. 

appendCategories(C,[R|L]):- 
    appendCategories(C1,L), 
    append(C1,R,X), 
    C = X. 

append([],L,L). 
append([H|T],L2,[H|L3]):- 
    append(T,L2,L3). 

解在prologconsole: [einkaufen,体育,酒店,schwimmen,桑拿]

爪哇:

import java.util.ArrayList; 
import java.util.Map; 
import org.jpl7.*; 

public ArrayList<String> getCategoriesByProlog(){ 
    ArrayList<String> categories = new ArrayList<String>(); 

    Variable X = new Variable("X"); 
     Query q4 = 
      new Query(
       "findAllCategories", 
       new Term[] {X} 
      ); 

    Map<String, Term>[] solutions = q4.allSolutions(); 

    for (int i=0 ; i<solutions.length ; i++) { 
     System.out.println("X = " + solutions[i].get("X")); 
     categories.add(solutions[i].get("X").toString()); 
    } 

    return categories; 

输出在Java中: X =' [|]'(运动,'[|]'(酒店,'[|]'(schwimmen,'[|]'(sauna,'[''')))))

我如何才能读取序言作为Java的ArrayList?

回答

0

你需要把它变成一个长期阵列像这样:

Map<String, Term>[] solutions = q4.allSolutions(); 

for (int i=0 ; i<solutions.length ; i++) 
{     
    System.out.println("X = " + solutions[i].get("X")); 

    //ADD THIS PART 
    Term term = solutions[i].get("X"); 

    int u=0;  
    for (Term oneTerm : term.toTermArray()) 
    { 
     categories.add(oneTerm); 
     System.out.println("term["+i+"]["+u+"] = " + oneTerm); 
     u++; 
    } 
}