Java 在jpl中调用listing函数
我想知道是否有人使用JPL中的“listing.”命令来检查Prolog知识库的内容?JPL要求您构造查询,并根据您在查询中设置的变量返回解决方案。例如Java:Java 在jpl中调用listing函数,java,prolog,swi-prolog,jpl,Java,Prolog,Swi Prolog,Jpl,我想知道是否有人使用JPL中的“listing.”命令来检查Prolog知识库的内容?JPL要求您构造查询,并根据您在查询中设置的变量返回解决方案。例如Java: Query q = new Query("holdsAt((X,Y) = true, 3)"); while ( q.hasMoreSolutions() ){ Hashtable s = q.nextSolution(); System.out.println(s.get("X")+", "+s.get("Y"));
Query q = new Query("holdsAt((X,Y) = true, 3)");
while ( q.hasMoreSolutions() ){
Hashtable s = q.nextSolution();
System.out.println(s.get("X")+", "+s.get("Y"));
}
我看不出这对于清单/0,甚至清单/1如何工作,因为清单/0需要实例化的输入。目前我正在玩弄表单的代码
predicate_property(L,interpreted),
\+ predicate_property(L, built_in),
\+ predicate_property(L,imported_from(_)),
current_predicate( X, L), current_predicate(X/Z).
它为知识库中现有的函数返回:
myFunction:-
myGoal1,
myGoal2.
myPredicate:-
myGoal1,
myGoal2.
答案是:
L = myFunction(_G403,_G404),
X = myFunction,
Z = 2
但这是不够的,因为没有一个进球会回来。我假设如果不能使用JPL调用listing函数,我需要的是一个函数,该函数将谓词头作为变量返回,同时返回必须满足的相关目标列表。不幸的是,我不熟悉listing函数的内部结构,因此我不确定如何进行此操作
提前感谢我有一个函数目前正在运行,但我担心它不如“列表”调用有效
getClauses(Y):-
predicate_property(L,interpreted),
\+ predicate_property(L, built_in),
\+ predicate_property(L,imported_from(_)),
current_predicate( X, L),
current_predicate(X/Z),
findall((L, T), clause(L, T), Y).
它为知识库中存在的谓词返回:
myFunction:-
myGoal1,
myGoal2.
myPredicate:-
myGoal1,
myGoal2.
结果是:
?- getClauses(Y).
Y = [ (myPredicate, myGoal1, myGoal2)]
请注意,这对从其他模块导入的谓词不起作用。后续:结果表明findall过多。