/* LPAD and CP-Logic interpreter Copyright (c) 2007, Fabrizio Riguzzi This package uses the library cudd, see http://vlsi.colorado.edu/~fabio/CUDD/ for the relative license. This file contains the functions for interfacing Yap and C The arguments of the predicate compute_prob are parsed and translated into C data structures */ #include "cplint.h" #include #include #include unsigned long dividend; FILE *open_file (char *filename, const char *mode); void reverse(char s[]); static int compute_prob(void); variables createVars(YAP_Term t,DdManager * mgr, int create_dot, char inames[1000][20]) /* adds the boolean variables to the BDD and returns the array vars containing them returns also the names of the variables to be used to save the ADD in dot format */ { YAP_Term varTerm,probTerm; int varIndex,nVal,i,b; variable v; char numberVar[10],numberBit[10]; double p; variables vars; vars.varar= (variable *) malloc(0* sizeof(variable)); vars.bVar2mVar=(int *) malloc(0* sizeof(int)); b=0; vars.nVar=0; varIndex=0; while(YAP_IsPairTerm(t)) { varTerm=YAP_HeadOfTerm(t); varIndex=YAP_IntOfTerm(YAP_HeadOfTerm(varTerm)); varTerm=YAP_TailOfTerm(varTerm); nVal=YAP_IntOfTerm(YAP_HeadOfTerm(varTerm)); varTerm=YAP_TailOfTerm(varTerm); probTerm=YAP_HeadOfTerm(varTerm); v.nVal=nVal; v.nBit=(int)ceil(log(nVal)/log(2)); v.probabilities=(double *) malloc(nVal* sizeof(double)); v.booleanVars=(DdNode * *) malloc(v.nBit* sizeof(DdNode *)); for (i=0;ibval) return 1; else return 0; } */ void init_my_predicates() /* function required by YAP for intitializing the predicates defined by a C function*/ { YAP_UserCPredicate("compute_prob",compute_prob,4); } FILE * open_file(char *filename, const char *mode) /* opens a file */ { FILE *fp; if ((fp = fopen(filename, mode)) == NULL) { perror(filename); exit(1); } return fp; } void reverse(char s[]) /* reverses a string */ { int i,c,j; for (i=0,j=strlen(s)-1;i