我在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))]
格式化搞砸了。我怎样才能克服这个问题?任何帮助将非常感激。
感谢。
答案 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