PrologBeans - 返回列表的格式

时间:2009-12-21 16:36:20

标签: prolog

我在Prolog文件中得到了这个:

:- 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))]

格式化搞砸了。我怎样才能克服这个问题?任何帮助将非常感激。

感谢。

1 个答案:

答案 0 :(得分:0)

您是否使用toString()创建了Java输出?很可能是toString() 在write_canonical和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年,Jan Burse,8004Zürich