王浩算法c语言源程序,王浩算法c语言实现.doc

PAGE

大连海事大学

人工智能基础课程实验报告

(2011-2012学年第一学期)

王浩算法

班 级:

学 号:

姓 名:

指导老师:

2011年 12月 7日

王浩算法的实现

一.实验内容

实现命题逻辑框架内的王浩算法。

1.将命题逻辑中的王浩算法推广至下述命题语言的情形之下:

(1).命题变量符号:p1,p2,p3,……

(2).逻辑连接符:﹁,︿,﹀,->,……

(3).间隔符:(,)……

2.在上述1中所定义的命题语言中实现王浩算法。

二.实验目的

熟练掌握命题逻辑中的王浩算法。

三.实验要求

1.实验题目必须由个人独立完成,允许自行参考相关文献资料,但严禁同学间相互拷贝和抄袭程序以及文档资料。实验结束后一周内上交实验报告和实验文档资料。

2.提交的文档资料包括设计文档和程序源代码。设计文档和程序源代码以书面文档方式提供(用A4纸打印),并提交电子文档备查。

四.数据结构

给定公式,例如:(p1->(q1->r1))->((p1->q1)->(p1->r1))

函数inite主要作用是负责将符号初始化成树的结构。

函数clone复制一棵完全相同的符号树。

函数restruct查找所有&,|, 等符号,并将其拆分成新形式:!,->符号。

函数searching王浩算法的主要函数。

函数show和output:显示符号串和推理过程。

五.实验结果

公式正确

公式错误

六.实验总结

公式不是恒真的时候,不一定是恒假的,王浩算法实质上是一个反向推理过程,它把给定的公式化成合取范式,然后通过判断每个子句是否恒真的来判定给定的公式是否是恒真的。所以,王浩算法不能说明公式恒假,只能说明不是恒真的。程序中的move函数十分重要,有的时候可能出现程序不能运行的情况所以,写这个函数时候是非常谨慎小心的。

附:程序源代码

#include

#include

#include

#define MAX_L 5

int i=0;

int stepcount=1;

enum type{

and,or,detrusion,equal,level,variable

};

struct node{

char *s;

type kind;

int polar;

node *next;

node *child;

int start;

};

struct step{

step *child;

step *brother;

node *lhead;

node *rhead;

int count;

char name[30];

};

int inite(char *s,node *head){

int len=strlen(s);

int j=0,polar=1;

node *current=NULL;

node *last=NULL;

if(s==NULL)return 0;

last=head;

while(i

if(s[i]=='|'){

if(!(s[i+1]<='Z'&&s[i+1]>='A'||s[i+1]<='z'&&s[i+1]>='a')&&s[i+1]!='1'&&s[i+1]!='0'&&s[i+1]!='('&&s[i+1]!='!'||i==0)return 0;

current=(node*)malloc(sizeof(node));

current->kind=or;

current->s=NULL;

current->next=NULL;

current->child=NULL;

current->polar=polar;

current->start=0;

if(last->kind==level&&last->child==NULL){

last->child=current;

}

else{

last->next=current;

}

last=current;

i++;

}

else if(s[i]=='&'){

if(!(s[i+1]<='Z'&&s[i+1]>='A'||s[i+1]<='z'&&s[i+1]>='a')&&s[i+1]!='1'&&s[i+1]!='0'&&s[i+1]!='('&&s[i+1]!='!'||i==0)return 0;

current=(node*)malloc(sizeof(node));

curr

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值