谓词逻辑归结原理源代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#include
#define null 0
typedef struct
{
char var;
char *s;
}mgu;
void strreplace(char *string,char *str1,char *str2) {
char *p;
while(p=strstr(string,str1))
{
int i=strlen(string);
int j=strlen(str2);
*(string+i+j-1)='\0';
for(int k=i-1;(string+k)!=p;k--)
*(string+k+j-1)=*(string+k);
for(i=0;i *(p++)=*(str2+i); } } void sort(mgu *u,int count) { int j=count; int k=j; if(count==1)return; for(int i=1;i { if(!((u+i)->s)) continue; if((u+i)->var==(u+j)->var) { delete (u+j)->s; (u+j)->s=null; k--; j=i; } if(((u+i)->s)&&((u+i)->var==*((u+i)->s))) { delete (u+i)->s; (u+i)->s=null; k--; } } j=count; if(k==j)return; count=k; for(int i=1;i { if((u+i)->s) continue; while(!((u+j)->s)) j--; (u+i)->var= (u+j)->var; (u+i)->s= (u+j)->s; (u+j)->s=null; k--; } cout<<"gjvjkhllknkln"; } class unifier { char *string; mgu unit[50]; int count; public: int num; unifier(); void input(); int differ(int n); int change(int i,int j,int n); void print(); ~unifier(){delete string;} }; unifier::unifier() { count=0; unit[0].s=null; } void unifier::input() { cout < string=new char[num*50]; cout<<"请注意:公式的输入不能出错!"< for(int j=1;j<=num;j++) { cout << "请输入第" << j << "个原子谓词公式(字符个数不超过50个)" < } } int unifier::change(int i,int j,int n) { char temp[2][10]; temp[0][0]=string[i++]; temp[1][0]=string[j++]; if(string[i]!='(') temp[0][1]='\0'; else { int k=1,flag=1; temp[0][k++]=string[i++]; while((flag!=0)&&k<10) { if(string[i]=='(') flag++; else if(string[i]==')') flag--; temp[0][k++]=string[i++]; } temp[0][k]='\0'; } temp[1][1]='\0'; if(strlen(temp[1])==1) { if(strstr(temp[0],temp[1])) return 2; strreplace(string+n*50,temp[1],temp[0]); strreplace(string+(n+1)*50,temp[1],temp[0]); count++; int m=count; unit[m].var=temp[1][0]; char *p=new char[strlen(temp[0])+1]; unit[m].s=p; strcpy(p,temp[0]); } return 1;