0

我想知道是否有人设法使用了“列表”。JPL 中的命令来检查 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"));
}

我看不出这对于listing/0 或什至需要实例化输入的listing/1 是如何工作的。目前我正在玩形式的代码

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.

答案:

L = myFunction(_G403,_G404),
X = myFunction,
Z = 2 

但这还不够,因为没有返回任何目标。我想我需要的是一个函数(如果不能使用 JPL 调用列表函数),它作为变量返回谓词头以及必须满足的相关目标列表。不幸的是,我不熟悉列表功能的内部结构,所以我不确定如何去做。

提前致谢

4

1 回答 1

0

我有一个暂时可以使用的功能,但我担心它的效率低于“列表”调用

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).

返回知识库中存在的谓词:

myPredicate:-
    myGoal1,
    myGoal2.

结果:

?- getClauses(Y).
Y = [ (myPredicate, myGoal1, myGoal2)] 

请注意,这不适用于从其他模块导入的谓词。

于 2009-07-29T18:09:48.493 回答