从CLIPS获取事实列表时获取FACT_ADDRESS数据类型 [英] get FACT_ADDRESS data type when get fact list from CLIPS

查看:159
本文介绍了从CLIPS获取事实列表时获取FACT_ADDRESS数据类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我将CLIPS嵌入到C语言中。
并且有代码:

  main {
DATA_OBJECT factlist;
int end,i;
void * multifieldPtr;
char * tempPtr;
InitializeEnvironment();
Load(constructs.clp);
Reset();
GetFactList(& factlist,NULL); //将事实从剪辑发送到c应用程序。
end = GetDOEnd(factlist);
printf(end =%d \\\
,end);
printf(Lengthis%d \\\
,GetDOLength(factlist));
multifieldPtr = GetValue(factlist);
printf(%d \\\
,end); (i = GetDOBegin(factlist); i <= end; i ++){
printf(i =%d \ n,i);


if(GetMFType(multifieldPtr,i)== FACT_ADDRESS){
tempPtr = ValueToString(GetMFValue(multifieldPtr,i)); //在这里有问题
printf(%d \\\
,* tempPtr); //在这里有问题
}
else {printf(%d \ n,GetMFType(multifieldPtr,i));
}
}

}



我知道GetMFType(muntifieldPtr,i)返回FACT_ADDRESS,我想如何从FACT_ADDRESS获取表示事实值的字符串值并将其打印到屏幕上。


<更新到最新剪辑版本(6.30)。

  

#includeclips.h
#define BUFFER_SIZE 1024

int main(int argc,char * argv []){

DATA_OBJECT factlist;
char factBuffer [BUFFER_SIZE + 1];
int end,i;
void * multifieldPtr;

void * theEnv;
theEnv = CreateEnvironment();

EnvBuild(theEnv,(deffacts initial(colors red green blue)(animals cat dog chicken)));

EnvReset(theEnv);

EnvGetFactList(theEnv,& factlist,NULL);

if(GetType(factlist)== MULTIFIELD)
{
end = GetDOEnd(factlist);

multifieldPtr = GetValue(factlist); (i = GetDOBegin(factlist); i <= end; i ++)
{
EnvGetFactPPForm(theEnv,factBuffer,BUFFER_SIZE,GetMFValue(multifieldPtr,i))的

;
printf(%s\,factBuffer);
}
}

return(-1);
}

您可以使用以下内容编译:

  make -f makefile.lib 
gcc<源文件名称> -L./ -lclips -lm -o<可执行文件名称>


I embed CLIPS into C Language. and have code:

main{
    DATA_OBJECT factlist;
    int end,i;
    void *multifieldPtr;
    char *tempPtr;
    InitializeEnvironment();
    Load("constructs.clp");
    Reset();
    GetFactList(&factlist,NULL);//send facts from clips to c application.   
    end=GetDOEnd(factlist);
    printf("end=%d\n",end);
    printf("Lengthis%d\n",GetDOLength(factlist));
    multifieldPtr=GetValue(factlist);
    printf("%d\n",end);

    for (i = GetDOBegin(factlist); i <= end; i++){
        printf("i=%d\n",i);
        if (GetMFType(multifieldPtr,i) == FACT_ADDRESS){
        tempPtr = ValueToString(GetMFValue(multifieldPtr,i));//have problems here 
        printf("%d\n",*tempPtr);//have problems here
        }
        else{printf("%d\n",GetMFType(multifieldPtr,i));
        }
    }

}

I know that GetMFType(muntifieldPtr,i)returns FACT_ADDRESS, I want to how to from the FACT_ADDRESS get the String value that represents the fact value and print the fact to the screen

解决方案

Updating to the newest clips version(6.30).

#include "clips.h"  
#define BUFFER_SIZE 1024

int main( int argc, char *argv[]){

DATA_OBJECT factlist;
char factBuffer[BUFFER_SIZE+1];
int end,i;
void *multifieldPtr;

void *theEnv;
theEnv = CreateEnvironment();

EnvBuild(theEnv, "(deffacts initial (colors red green blue) (animals cat dog chicken))");

EnvReset(theEnv);

EnvGetFactList(theEnv,&factlist,NULL);

if (GetType(factlist) == MULTIFIELD)
  {
   end = GetDOEnd(factlist);

   multifieldPtr = GetValue(factlist);

   for (i = GetDOBegin(factlist); i <= end; i++)
     {
      EnvGetFactPPForm(theEnv, factBuffer,BUFFER_SIZE,GetMFValue(multifieldPtr,i));
      printf("%s\n",factBuffer);
     }
  }

return(-1);
}

You can compile with:

make -f makefile.lib
gcc <source file name> -L./ -lclips -lm -o <executable name>

这篇关于从CLIPS获取事实列表时获取FACT_ADDRESS数据类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆