2009-12-21 25 views
1

我在Prolog的文件中得到這個:PrologBeans在返回列表格式

:- module(test,[main/0, api_trial/2] 
:- use_module(library(prologbeans)). 

main:- 
    register_query(assert_trial(Age,Res), api_trial(Age,Res)), 
    start. 

person('John',10,'London'). 
person('Adam',10,'Manchester'). 

api_trial(Age,Res) :- 
    findall((P,Age,Add),person(P,Age,Add),Res). 

在Java中,我做了下面的查詢(輸入正確類等後):

public void trial() { 
    try{ 
     Bindings bindings = new Bindings().bind("Age",10); 
     QueryAnswer answer = session.executeQuery("assert_trial(Age,Res)", bindings); 
     Term result = answer.getValue("Res"); 
     System.out.println("Answer returned " + result); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (IllegalCharacterSetException e) { 
     e.printStackTrace(); 
    } 
} 

基本上,我的問題是,它返回的格式是Java中的查詢。 在Prolog,這是正常的:

Res = [('John',10,'London'),('Adam',10,'Manchester')] ? 

在Java中,我得到:

Answer returned [,(John,,(10,London)),,(Adam,,(10,Manchester))] 

的格式被搞砸了。我怎樣才能克服這個問題?任何幫助將非常感激。

謝謝。

+0

其中的Prolog實現您使用的是在這裏嗎? – daf

回答

0

您是否使用toString()創建Java輸出? toString()最有可能實現寫in_write_canonical和write之間的write。

從write_canonical它將分享運營商f不被尊重。相反,它們通常分別寫成f(a1,a2)f(a1)。

每個Prolog有一個運營商的定義是逗號,這就是爲什麼我們可以 輸入(A,B),但write_canonical將它寫爲 ''(A,B):

?- X = (A,B), write_canonical(X). 
    ','(_,_) 
    X = (A,B) 

我現在在你的輸出中看到的是,它也被引號剝奪了。 這是寫的正常行爲:

?- X = 'hello world!', write(X). 
    hello world! 
    X = 'hello world!' 

,將兩個運營商方面,並把報價在必要 將writeq在寫操作。

問候

(C)2010,揚金庫,8004蘇黎世