1

私がやろうとしているのは、Prolog インスタンスのコピーを作成し、そのコピーを JPL (Java-Prolog Interface) でロードすることです。これを行う方法はいくつか考えられますが、どれも完全には解決されていません。それが私がここに来た理由です。

まず、 を使用して状態のコピーを保存できることを知っていますqsave_program/2。これにより、実行可能なexeファイルが作成されます。ただし、JPL を使用して、この保存されたインスタンスを Java からクエリする必要があります。これに関するドキュメントを探してみましたが、何も見つかりませんでした (おそらく一般的な問題ではありません)。を使用して保存したインスタンスをqsave_program/2実行し、JPL から照会する方法はありますか?

2 番目のアイデアは、動的にアサートされたすべての句について、元のインスタンスをクエリすることです。しかし、何が主張されたのかは分からないので直接求めることはできず、動的であるという前提でこれらの節を集めなければなりません。次に、JPL から別のインスタンスを開始し、これらのファクトをアサートしてコピーを作成するだけです。これは可能ですか?そして、これは事実上、州のコピーを作成するでしょうか?

4

1 に答える 1

0

さて、これが私が決めた解決策です。次のクエリを使用して、再アサートする必要があるすべての述語を見つけることができます。

predicate_property(X,dynamic),\+predicate_property(X,built_in),\+predicate_property(X,number_of_clauses(0)).

これが私にとってうまくいくと思う理由です。 predicate_property(X,dynamic)すべての動的述語を教えてくれます。ここでやめない理由は、prolog の新しいインスタンスで明示的にアサートする必要のない句を含む動的な述語がたくさんあるからです。プロパティを持つ述語built_inは、プロローグ クエリの新しいインスタンスを作成するときに自動的に定義されるため、無視できます。ユーザーによって明示的に定義されている場合でも、同じファイルを参照しているため、その定義は再インスタンス化されます。また、節を持たない述語 ( ) を無視することもできます。述語に節number_of_clauses(0)がない場合、述語は状態に影響を与えないからです。

したがって、必要なすべての動的述語を取得したら、それらの述語に対するすべてのソリューションを見つけ、JPL を介して Java で返された条件のリストを作成し、ファイルの新しいコンサルテーションを開き、それらの条件を再度表明することができます。

于 2016-12-02T06:19:41.773 に答える