5

非常に複雑であるだけでなく、Prolog が理想的な複数のソリューションを必要とする C++ プログラムのロジックがあります。これは、アクションの入力をチェックするファイアウォール構成スクリプトのようなものですが、複数のアクションが必要になる場合もあります。

私が欲しいのは次のようなものです:

class PrologEngine
{
    LoadLogic(const char* filename) throw PrologException; // Load a file of prolog rules, predicates facts etc in textual format. Must be callable multiple times to load AND COMPILE (for speed) prolog rule files.

    std::vector<std::string> Evaluate(const char* predicate_in_string_form = "execute(input, Result)") throw PrologException; Returns a vector of matching predicates in text form.

};

C++ にコールバックする機能は必要ありません。

AMI Prolog はそれを取得しているようですが、Linux では利用できません。私は SWI-Prolog を使用しようとしていますが、2 つの例と信じられないほどビザンチン API (私の意見) しか見つかりません。

誰かが私が探しているものに近い例を教えてもらえますか?

4

2 に答える 2

4

高レベルのSWI-Prolog への C++ インターフェイスがあります。

私はそれと戦っています。ここでは、OpenGL へのブリッジの例を示します。

PREDICATE(glEvalCoord1d, 1) {
 double u = A1;
 glEvalCoord1d( u );
 return TRUE;
}

このクリーンなコードは、暗黙の型変換といくつかのマクロを使用して、多くの「バイザンチン主義」を隠しています。インターフェイスは非常に頑丈で双方向です。C++ から Prolog を呼び出すには、PlCall (回答で公開する Evaluate と同様に、クエリを「実行」) またはより構造化された PlQuery があり、複数の結果が得られます...

openGl にリンクする必要がない場合、または SWI-Prolog メーリング リストから回答が得られることを期待できる場合は、それを評価する必要があります。

于 2012-02-15T17:17:05.747 に答える
3

ネイティブの C++ ヘッダーのみのライブラリで使用するためにプロローグ コードを書き直してもかまわない場合は、castor ライブラリを調べます: http://www.mpprogramming.com/cpp/

于 2012-02-15T17:09:50.657 に答える