我想使用JPL来获取查询trace/0
的结果。
我尝试通过控制台中的swi-prolog执行以下步骤,并且可以正常工作。
set_prolog_flag(color_term, true).
working_directory(_,"MY_PROJECT_PATH").
leash(+all).
visible(-all).
protocol("./trace_out_put.txt").
trace.
safe_to_stack(obj1, obj2)
%这是要跟踪的查询
nodebug.
noprotocol.
这些步骤之后,将跟踪结果放入我的项目路径下的文件“ trace_out_put.txt”中。
使用JPL7,我在上面的这些查询中尝试了以下代码。
String[] queries = {
"set_prolog_flag",
"working_directory",
"leash",
"visible",
"protocol",
"trace",
"safe_to_stack(obj1,obj2).",
"nodebug",
"noprotocol"
};
Term[][] param = {
new Term[]{new Atom("color_term"),new Atom("false")},
new Term[]{new Variable("_"), new Atom( "/Users/bobhu/project/prologebg","text")},
new Term[]{new Atom("+all")},
new Term[]{new Atom("-all")},
new Term[]{new Atom("./trace_output.txt","text")},
new Term[]{},
new Term[]{},
new Term[]{},
new Term[]{}
};
Query[] allQuery = new Query[queries.length];
for (int i = 0; i < queries.length; i++) {
allQuery[i] = new Query(queries[i], param[i]);
System.out.println(allQuery[i]);
try {
System.out.println(allQuery[i].hasSolution());
}catch(Exception e) {
System.out.println("wrong at "+ i);
}
}
基本上,它一个接一个地执行查询。
输出显示leash
和visible
,但有例外,与控制台输出不同:
set_prolog_flag( color_term, false )
true
working_directory( _, '/Users/bobhu/project/prologebg' )
true
leash( '+all' )
wrong at leash( '+all' )
visible( '-all' )
wrong at visible( '-all' )
protocol( './trace_output.txt' )
true
trace( )
true
Call: (1) atom_to_term('safe_to_stack(obj1,obj2).', _82, _84) ?
此外,对trace
的执行也没有达到预期的效果,并且执行一直停留在这里,等待我对ENTER
的键盘响应继续。
我已经检查过swi-prolog中的leash/1
应该是leash(?Ports)
的形式,因此将Atom
而不是Port
传递给leash
是不正确,但是,我找不到另一种方法。
如何通过JPL自动完成所有这些操作?还是有其他方法可以获取trace的控制台输出?
答案 0 :(得分:0)
这是在答案空间中张贴的评论,因为所需的格式在评论中不起作用。不要投票。
在代码运行中,您有
1. "set_prolog_flag",
2. "working_directory",
3. "leash",
4. "visible",
5. "protocol",
6. "trace",
7. "safe_to_stack(obj1,obj2).",
8. "nodebug",
9. "noprotocol"
带有参数
1. new Term[]{new Atom("color_term"),new Atom("false")},
2. new Term[]{new Variable("_"), new Atom( "/Users/bobhu/project/prologebg","text")},
3. new Term[]{new Atom("+all")},
4. new Term[]{new Atom("-all")},
5. new Term[]{new Atom("./trace_output.txt","text")},
6. new Term[]{},
7. new Term[]{},
8. new Term[]{},
9. new Term[]{}
请注意,使用Java代码是
3. "leash",
3. new Term[]{new Atom("+all")},
和
4. "visible",
4. new Term[]{new Atom("-all")},
尝试反转+all
和-all