第一范文网 - 专业文章范例文档资料分享平台

谓词逻辑归结原理源代码

来源:用户分享 时间:2025/10/7 18:00:18 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

#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

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;i0;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<<\}

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 <>num;

string=new char[num*50];

cout<<\请注意:公式的输入不能出错!\ for(int j=1;j<=num;j++) {

cout << \请输入第\个原子谓词公式(字符个数不超过50个)\ cin>>(string+(j-1)*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;

}

int unifier::differ(int n) {

int i=n*50,j=(n+1)*50;

while((string[i]!='\\0')&&(string[j]!='\\0')&&(string[i]==string[j])) {i++;j++;}

if(string[i]=='\\0'||string[j]=='\\0') return 1; int k;

if(string[i+1]=='(') k=change(i,j,n); else if(string[j+1]=='(') k=change(j,i,n);

else if(string[j]=='x'||string[j]=='y'||string[j]=='z'||string[j]=='u'|| string[j]=='v'||string[j]=='w') k=change(i,j,n); else

k=change(j,i,n); if(k==2) return k; j=count; char c[2],*p; for(i=1;i

c[0]=unit[j].var; c[1]='\\0';

if(!strstr(unit[i].s,c)) continue;

p=new char[strlen(unit[j].s)+strlen(unit[i].s)+1]; strcpy(p,unit[i].s);

strreplace(p,c,unit[j].s); delete unit[i].s; unit[i].s=p; }

sort(unit,count); return 0; }

void unifier::print() {

cout <<\ for(int i=1;i

搜索更多关于: 谓词逻辑归结原理源代码 的文档
谓词逻辑归结原理源代码.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c0k0t3420xf3j4le875nu_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top