87 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|   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.
 | |
| 
 | |
| */
 | |
| #include "config.h"
 | |
| #include "cudd_config.h"
 | |
| #if HAVE_CUDD_UTIL_H
 | |
| #include "cudd/util.h"
 | |
| #include "cudd/cuddInt.h"
 | |
| #include "cudd/mtr.h"
 | |
| #else
 | |
| #include "util.h"
 | |
| #include "cuddInt.h"
 | |
| #include "mtr.h"
 | |
| #endif
 | |
| #include "YapInterface.h"
 | |
|  
 | |
| typedef struct
 | |
| {
 | |
|   int var,value;
 | |
| } factor;
 | |
| 
 | |
| typedef struct
 | |
| {
 | |
|   int nFact;
 | |
|   factor * factors;
 | |
| } term;
 | |
| 
 | |
| typedef struct
 | |
| {
 | |
|   int nTerms;
 | |
|   term * terms;
 | |
| } expr;
 | |
| 
 | |
| typedef struct
 | |
| {
 | |
|   int nVal,nBit;
 | |
|   double * probabilities;
 | |
|   DdNode * * booleanVars;
 | |
| } variable;
 | |
| 
 | |
| typedef struct
 | |
| {
 | |
|   int nVar;
 | |
|   int nBVar;
 | |
|   variable * varar;
 | |
|   int * bVar2mVar;
 | |
| } variables;
 | |
| 
 | |
| typedef struct 
 | |
| {
 | |
|   DdNode *key;
 | |
|   double value;
 | |
| } rowel;
 | |
| 
 | |
| typedef struct  
 | |
| {
 | |
|   int cnt;
 | |
|   rowel *row;
 | |
| } tablerow;
 | |
| 
 | |
| variables createVars(YAP_Term t,DdManager * mgr, int create_dot, 
 | |
|   char inames[1000][20]);
 | |
| expr createExpression(YAP_Term t);
 | |
| void init_my_predicates(void);
 | |
| 
 | |
| DdNode * retFunction(DdManager * mgr, expr expression,variables v);
 | |
| DdNode * retTerm(DdManager * mgr,term t,variables v);
 | |
| DdNode * retFactor(DdManager * mgr, factor f, variables v);
 | |
| 
 | |
| double Prob(DdNode *node, variables vars,tablerow * nodes);
 | |
| 
 | |
| double ProbBool(DdNode *node, int bits, int nBit,int posBVar,variable v,
 | |
|   int mVarIndex,
 | |
|   variables vars,tablerow * nodes, int comp);
 | |
| 
 | |
| tablerow* init_table(int nbvars);
 | |
| double * get_value(tablerow *tab,  DdNode *node);
 | |
| void add_node(tablerow *tab, DdNode *node, double value);
 | |
| void destroy_table(tablerow *tab, int nbvars);
 | |
| 
 |