CLIPエキスパートシステムエンジンを使用するC#でWPFアプリケーションを開発しています.Garyが開発したCLIPSCRLWrapper.dllを使用しました。 はここに私のC#のコードです:しかし、ときCLIPS Eval関数がIDEの場合と同じようにCLIPSCRLWrapper.dllで動作しない理由
if(rc==0)
{
std::string excStr="Eval: Invalid expression";
excStr.appennd(evalString);
throw std::logic_error(excStr);
}
:、私は見つける
clips.Load("ATC.clp");
clips.Eval("(Clear)");
clips.Reset();
clips.Run();
sring evalStr="(find-all-facts ((?f ATCOutPut)) TRUE)";
FactAddressValue fv =(FactAddressValue)((MultifieldValue)clips.Eval(evalStr))[0];
しかし、デバッグの後、最後の行code.andに押しつぶさプロジェクトプログラムは、このコードスニペットに実行されます私はそれを返す、「(見つけ-すべての事実を((?ATCOutPut F))TRUE)」を入力し、IDEで "ATC.clpを" ロード
ファクト-1
また、Garyが投稿した "clips_dotnet_010"コードも読んでいますが、上記のC#コードはGaryのものとほとんど同じですが、ちょうど潰れました。理由はわかりません。
したがって、同じ評価文字列は、DLLとIDEの異なる結果を取得します。 どうすればIDEとしてCLIPSCRLWrapper.dllで同じ結果が得られますか?
そして、以下のような「ATC.clp」のコード:
(deftemplate ATCOutPut
(slot name (type SYMBOL)(default nil))
(slot end (type STRING)(default ""))
(slot planetype(type STRING)(default ""))
(slot landingtype(type STRING)(default ""))
(slot value (type NUMBER)(default 5000))
(slot ID(type INTEGER)(default 0))
)
(deffacts InitATC
(ATCOutPut (name NONE))
)
しかし、最後の行ではちょうど潰れました: "FactAddressValue fv =(FactAddressValue)((MultifieldValue)clips.Eval(evalStr))[0];"、私は数日間この作業をしましたまだそれを作ることはできません。だから、あなたは私の唯一の希望です。 –
最も可能性の高い説明は、プログラムの作業ディレクトリがrulesファイルがあるディレクトリと異なるため、ルールがロードされなかったことです。 –
私は問題を最終的に見つけました。つまり、Windowsを使用しています10.Win7にプロジェクトをコピーすると、正常にコンパイルされました。 –