-1

JESSでコードを書きました。現在、Java からコードを実行しています。engine.execute("") コマンドを for ループに入れたいというこの問題に遭遇しました。私のコード例は次のとおりです。

for (int i = 0; i < 10; i++){
    for (int j = 0; j < 10; j++){
r.executeCommand("(answer(ident headers.get(i)(text patientData.get(j).get(i))");
    }
}

answer は、2 つのスロットを持つ JESS の deftemplate です。Java でテキスト ファイルを読み取り、deftemplate のスロットに値を挿入しています。

ありがとう、アリ

4

1 に答える 1

0

がスロットとanswerを持つ deftemplate の場合、次のスニペットはファクトの構築のように見えます:identtext

(answer(ident headers.get(i)(text patientData.get(j).get(i))
  • 裸の事実は、 を介して実行できる Jess コマンドを表していませんRete.executeCommand
  • 非推奨のメソッドは使用しないでくださいexecuteCommand。使用してevalください。
  • あなたの括弧は適切にバランスが取れていません.4つの閉じ括弧に対して6つの開き括弧.
  • ヘッダーが Java アプリケーションにあると仮定するとList<String>、Jess に Java メソッド呼び出しを単純にスローすることはできません。Jess はそもそも Java 構文を理解しておらず、(おそらく) pojo についてもまったく認識していませんheader
  • 同じことが pojo にも当てはまりますpatientData
  • オブジェクトを Java プログラムから Jess エンジンに渡すことはできますがi、 や などの単純な変数では絶対に不可能ですj

これらすべてを考慮すると (そのほとんどは優れた Jess マニュアルから簡単に学ぶことができます)、次を使用します。

r.eval( "(assert (answer (ident \"" +
        headers.get(i) +
        "\")(text \"" +
        patientData.get(j).get(i) +
        "\")))" );

成功する可能性があり、実際に新しい事実を作業メモリに挿入します。

于 2015-03-27T06:21:02.680 に答える