我开发的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时,它编译成功。谢谢你的关注。 –