2009-07-29 21 views
0

「リスティング」を管理していた人がいるかどうかは疑問でした。 JPLのPrologナレッジベースの内容を調べるコマンドですか? JPLではクエリを作成する必要があり、クエリで設定した変数に基づいてソリューションを返します。例(Java)の場合:jplでリスティング機能を呼び出す

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をリストアップするためにどのように動作するかを見ることができません。しかし、それは十分ではありません

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

myFunction:- 
    myGoal1, 
    myGoal2. 

答え:現時点では私は、ナレッジベース内の既存の機能のために返す形

predicate_property(L,interpreted), 
\+ predicate_property(L, built_in), 
\+ predicate_property(L,imported_from(_)), 
current_predicate(X, L), current_predicate(X/Z). 

のコードで遊んでいますいずれの目標も返されないため、私が必要とするもの(リスティング関数がJPLを使用して呼び出すことができない場合)は、満足しなければならない関連する目標のリストと共に述語の頭部を変数として返す関数です。残念ながら、私はリスティング関数の内部に精通していないので、これを行う方法についてはわかりません。事前に

おかげ

答えて

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

これは、他のモジュールからインポートされた述部に対しては機能しません。

+0

フォローアップ:findallが過剰であることが判明しました。 – Huguenot

関連する問題