#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<math.h>
#define NULL 0
char *str[]={0,"chew_cud","hooves","mammal","forward_eyes","claws",
"pointed_teeth","eat_meal","lay_eggs","fly","feathers","ungulate",
"carnivore","bird","give_milk","has_hair","fly_well",
"black&white_color","can_swim","long_legs","long_neck",
"black_stripes","dark_spots","tawny_color","albatross",
"penguin","ostrich","zebra","giraffe","tiger","cheetah","not_fly","#"};
int rulep[][6]={{3,12,23,22,0,0},{3,12,23,21,0,0},{11,20,19,22,0,0},
{11,21,0,0,0,0},{31,13,20,19,17,0},{31,13,18,17,0,0},{13,16,0,0,0,0},
{15,0,0,0,0,0},{14,0,0,0,0,0},{10,0,0,0,0,0},{8,9,0,0,0,0},
{7,0,0,0,0,0},{6,5,4,0,0,0},{3,2,0,0,0,0},{3,1,0,0,0,0}};
int rulec[]={30,29,28,27,26,25,24,3,3,13,13,12,12,11,11,0};
typedef struct fact
{
int number;
char name[20];
int active;
int succ;
struct fact *next;
}FACT;
FACT *fact_head=NULL;
typedef struct rule
{
char name[20];
int pre[6];
int conc;
struct rule *next;
}RULE;
RULE *rule_head=NULL;
void initfact()
{
FACT *f,*ftemp;
int i=0;
while(strcmp(*(str+i),"#")!=0)
{
f=(struct fact *)malloc(sizeof(struct fact));
strcpy(f->name,*(str+i));
f->number=i;
f->active=0;
f->succ=-1;
f->next=fact_head;
fact_head=f;
i++;
}
f=fact_head;
fact_head=NULL;
while(f)
{
ftemp=f;
f=f->next;
ftemp->next=fact_head;
fact_head=ftemp;
}