0

誰かが「リスト」をなんとか使ったのだろうかと思っていました。Prologナレッジベースの内容を調べるためのJPLのコマンド?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

とりあえず機能している関数がありますが、「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).

これは、ナレッジベースに存在する述語を返します。

myPredicate:-
    myGoal1,
    myGoal2.

結果:

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

これは、他のモジュールからインポートされた述語では機能しないことに注意してください。

于 2009-07-29T18:09:48.493 に答える