我開發的C#WPF應用程序,它使用CLIPS專家系統引擎在一些parts.I的使用哪個加里開發的CLIPSCRLWrapper.dll 。 這裏是我的C#代碼:爲什麼CLIPS eval函數沒有在CLIPSCRLWrapper.dll因爲它在IDE工作同
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調試運行後的項目,我覺得在程序運行到這一代碼片段:
if(rc==0)
{
std::string excStr="Eval: Invalid expression";
excStr.appennd(evalString);
throw std::logic_error(excStr);
}
然而,當我加載 「ATC.clp」 在IDE中,鍵入「(找到-ALL-事實((?F的ATCOutPut))TRUE)」,則返回
實況1
,我也讀了「clips_dotnet_010」代碼加里發佈,C#代碼上面相差無幾與Gary's.But礦只是crushed.I不知道爲什麼。
所以,同樣的eval字符串得到不同勢的結果INT DLL和IDE。 請幫我,我怎樣才能在IDEPSCRLWrapper.dll中獲得與IDE相同的結果?
而且,在「ATC.clp」像下面的代碼:
clips.Eval("(Clear)");
有剪輯中沒有命令名爲清除大寫的C:
(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];」,我已經在這工作了好幾天,仍然無法成功。所以,你是我唯一的希望。 –
最可能的解釋是您的規則未加載,因爲程序的工作目錄與規則文件所在的目錄不同。 –
我終於找到了問題,那是我使用Windows 10.當我複製項目到Win7時,它編譯成功。謝謝你的關注。 –