unification.c
#include<stdio.h> int no_of_pred; int no_of_arg[10]; int i,j; char nouse; char predicate[10]; char argument[10][10]; void unify(); void display(); void chk_arg_pred(); void main() { char ch; do{ printf("\t=========PROGRAM FOR UNIFICATION=========\n"); printf("\nEnter Number of Predicates:- [ ]\b\b"); scanf("%d",&no_of_pred); for(i=0;i<no_of_pred;i++) { scanf("%c",&nouse); //to accept "enter" as a character printf("\nEnter Predicate %d:-[ ]\b\b",i+1); scanf("%c",&predicate[i]); printf("\n\tEnter No.of Arguments for Predicate %c:-[ ]\b\b",predicate[i]); scanf("%d",&no_of_arg[i]); for(j=0;j<no_of_arg[i];j++) { scanf("%c",&nouse); printf("\n\tEnter argument %d:( )\b\b",j+1); scanf("%c",&argument[i][j]); } } display(); chk_arg_pred(); printf("Do you want to continue(y/n): "); scanf("%c",&ch); }while(ch == 'y'); } void display() { printf("\n\t=======PREDICATES ARE======"); for(i=0;i<no_of_pred;i++) { printf("\n\t%c(",predicate[i]); for(j=0;j<no_of_arg[i];j++) { printf("%c",argument[i][j]); if(j!=no_of_arg[i]-1) printf(","); } printf(")"); } } void chk_arg_pred() { int pred_flag=0; int arg_flag=0; /*======Checking Prediactes========*/ for(i=0;i<no_of_pred-1;i++) { if(predicate[i]!=predicate[i+1]) { printf("\nPredicates not same.."); printf("\nUnification cannot progress!"); pred_flag=1; break; } } /*=====Chking No of Arguments====*/ if(pred_flag!=1) { for(i=0;i<no_of_arg[i]-1;i++) { if(no_of_arg[i]!=no_of_arg[i+1]) { printf("\nArguments Not Same..!"); arg_flag=1; break; } } } if(arg_flag==0&&pred_flag!=1) unify(); } /*==========UNIFY FUNCTION=========*/ void unify() { int flag=0; for(i=0;i<no_of_pred-1;i++) { for(j=0;j<no_of_arg[i];j++) { if(argument[i][j]!=argument[i+1][j]) { if(flag==0) printf("\n\t======SUBSTITUTION IS======"); printf("\n\t%c/%c",argument[i+1][j],argument[i][j]); flag++; } } } if(flag==0) { printf("\nArguments are Identical..."); printf("\nNo need of Substitution\n"); } } /* dypcoe@dypcoe-OptiPlex-390:~$ gcc u.c dypcoe@dypcoe-OptiPlex-390:~$ ./a.out =========PROGRAM FOR UNIFICATION========= case 1 when args are same Enter Number of Predicates:- [2] Enter Predicate 1:-[a] Enter No.of Arguments for Predicate a:-[2] Enter argument 1:(5) Enter argument 2:(x) Enter Predicate 2:-[a] Enter No.of Arguments for Predicate a:-[2] Enter argument 1:(3) Enter argument 2:(y) =======PREDICATES ARE====== a(5,x) a(3,y) ======SUBSTITUTION IS====== 3/5 case 2 when args are not same dypcoe@dypcoe-OptiPlex-390:~$ gcc u.c dypcoe@dypcoe-OptiPlex-390:~$ ./a.out =========PROGRAM FOR UNIFICATION========= Enter Number of Predicates:- [2] Enter Predicate 1:-[a] Enter No.of Arguments for Predicate a:-[2] Enter argument 1:(5) Enter argument 2:(x) Enter Predicate 2:-[a] Enter No.of Arguments for Predicate a:-[3] Enter argument 1:(3) Enter argument 2:(x) Enter argument 3:(y) =======PREDICATES ARE====== a(5,x) a(3,x,y) Arguments Not Same..!Do you want to continue(y/n): dypcoe@dypcoe-OptiPlex-390:~$ gcc u.c dypcoe@dypcoe-OptiPlex-390:~$ case 3 when args are identical nter Number of Predicates:- [2] Enter Predicate 1:-[a] Enter No.of Arguments for Predicate a:-[2] Enter argument 1:(3) Enter argument 2:(7) Enter Predicate 2:-[a] Enter No.of Arguments for Predicate a:-[2] Enter argument 1:(3) Enter argument 2:(7) =======PREDICATES ARE====== a(3,7) a(3,7) Arguments are Identical... No need of Substitution */
Tags:
PROGRAMMING