无法在剪辑嵌入式应用程序中断言事实
Can't assert facts in clips embedded application
我试图在嵌入式应用程序的CLIPS中断言一个新事实。我尝试了两种方法:- 第一个使用 assert,如高级编程指南第 74 页的示例所示。- 第二种方法是使用断言字符串。我独自尝试了每种方式,也尝试了两种方式。
我正在使用RUN_TIME模块。我的代码输出正确的结构(定义规则和定义模板(,但没有断言新事实。只有初始事实在那里。我不知道为什么!
这是我的代码:
#include "clips.h"
int main()
{
void *theEnv, *newFact, *templatePtr;
DATA_OBJECT theValue;
extern void *InitCImage_1();
theEnv = InitCImage_1();
EnvReset(theEnv);
// One way
templatePtr = EnvFindDeftemplate(theEnv, "Navigation");
newFact = EnvCreateFact(theEnv, templatePtr);
if (newFact == NULL) return -1;
theValue.type = SYMBOL;
theValue.value = EnvAddSymbol(theEnv, "Auto");
EnvPutFactSlot(theEnv, newFact, "FlightStatus", &theValue);
EnvAssert(theEnv, newFact);
// The other way
EnvAssertString(theEnv, "(Navigation (FlightStatus Auto))");
EnvRun(theEnv,-1);
EnvListDeftemplates(theEnv, "stdout", NULL);
EnvListDefrules(theEnv, "stdout", NULL);
EnvListDeffacts(theEnv, "stdout", NULL);
}
我的代码出了什么问题?
使用:
EnvFacts(theEnv,"stdout",NULL,-1,-1,-1);
而不是:
EnvListDeffacts(theEnv, "stdout", NULL);
Deffacts 是定义执行(重置(命令时要断言的事实列表的构造。有一个预定义的初始事实定义,用于在执行重置时断言(初始事实(。这就是你在调用EnvListDeffacts时看到的内容。您希望改为调用 EnvFacts 以查看实际断言的事实(无论是由重置后的 deffacts 创建还是直接使用 断言(。
相关文章:
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 多线程应用程序中的零MQ处理中断
- 当我跳到应用程序时,中断无法工作(STM32)
- 如何中断嵌入C++应用程序中的python解释器
- 如何在运行 cpp 应用程序的 GUI 时通过 GDB 设置中断
- Stockfish 引擎在从视图控制器而不是应用程序委托 iOS 加载时中断
- 将 INT3 中断保留给视觉工作室上的应用程序异常处理程序
- PEM_read_RSA_PUBKEY返回并中断应用程序
- 如何在Linux应用程序上使用C++中的终端输入中断循环/进程
- QT创建者:c++应用程序运行几次后中断
- Qt5:如何创建基于qt应用程序中断驱动的gpio按钮
- 在服务器应用程序中处理中断信号的最佳方式
- Pageheap 不会使我的应用程序中断
- linux多线程应用程序中的中断会生成SIGSEGV