98 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			98 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- style_check(all).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- use_module(library(bdd)).
							 | 
						||
| 
								 | 
							
								:- use_module(library(lists)).
							 | 
						||
| 
								 | 
							
								:- use_module(library(maplist)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								t1 :-
							 | 
						||
| 
								 | 
							
									t1(X),
							 | 
						||
| 
								 | 
							
									writeln(X),
							 | 
						||
| 
								 | 
							
									fail.
							 | 
						||
| 
								 | 
							
								t1.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								t1(BDD:T) :-
							 | 
						||
| 
								 | 
							
									bdd_new(X+(_Y+X)*(-_Z), BDD),
							 | 
						||
| 
								 | 
							
									bdd_tree(BDD,T).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								t2 :-
							 | 
						||
| 
								 | 
							
									t2(X),
							 | 
						||
| 
								 | 
							
									writeln(X),
							 | 
						||
| 
								 | 
							
									fail.
							 | 
						||
| 
								 | 
							
								t2.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								t2(V) :-
							 | 
						||
| 
								 | 
							
									bdd_new(X+(Y+X)*(-Z), BDD),
							 | 
						||
| 
								 | 
							
									member(X, [0,1]),
							 | 
						||
| 
								 | 
							
									member(Y, [0,1]),
							 | 
						||
| 
								 | 
							
									member(Z, [0,1]),
							 | 
						||
| 
								 | 
							
									bdd_eval(BDD, V).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								t3 :-
							 | 
						||
| 
								 | 
							
									t3(X),
							 | 
						||
| 
								 | 
							
									writeln(X),
							 | 
						||
| 
								 | 
							
									fail.
							 | 
						||
| 
								 | 
							
								t3.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								t3(V) :-
							 | 
						||
| 
								 | 
							
									bdd_new(X+(Y+X)*(-Z), BDD),
							 | 
						||
| 
								 | 
							
									bdd_tree(BDD, bdd(_, T, _Vs) ),
							 | 
						||
| 
								 | 
							
									reverse(T, RT),
							 | 
						||
| 
								 | 
							
									member(X, [0,1]),
							 | 
						||
| 
								 | 
							
									member(Y, [0,1]),
							 | 
						||
| 
								 | 
							
									member(Z, [0,1]),
							 | 
						||
| 
								 | 
							
									foldl(eval_bdd, RT, _, V).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								eval_bdd(pp(P,X,L,R), _, P) :-
							 | 
						||
| 
								 | 
							
									P is ( X/\L ) \/ ( (1-X) /\ R ).
							 | 
						||
| 
								 | 
							
								eval_bdd(pn(P,X,L,R), _, P) :-
							 | 
						||
| 
								 | 
							
									P is ( X/\L ) \/ ( (1-X) /\ (1-R) ).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								t4 :-
							 | 
						||
| 
								 | 
							
									t4(_),
							 | 
						||
| 
								 | 
							
									fail.
							 | 
						||
| 
								 | 
							
								t4.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								t4([X,Y,Z]) :-
							 | 
						||
| 
								 | 
							
									bdd_new(X+(Y+X)*(-Z), BDD),
							 | 
						||
| 
								 | 
							
									bdd_print(BDD, user_output).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								t5 :-
							 | 
						||
| 
								 | 
							
									t5(X),
							 | 
						||
| 
								 | 
							
									writeln(X),
							 | 
						||
| 
								 | 
							
									fail.
							 | 
						||
| 
								 | 
							
								t5.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								t5(V) :-
							 | 
						||
| 
								 | 
							
									bdd_new(X+(Y+X)*(-Z), BDD),
							 | 
						||
| 
								 | 
							
									member(X, [0.3,0.7]),
							 | 
						||
| 
								 | 
							
									member(Y, [0.4,0.6]),
							 | 
						||
| 
								 | 
							
									member(Z, [0.9,0.1]),
							 | 
						||
| 
								 | 
							
									bdd_to_probability_sum_product(BDD, V).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								t6 :-
							 | 
						||
| 
								 | 
							
									t6(X),
							 | 
						||
| 
								 | 
							
									writeln(X),
							 | 
						||
| 
								 | 
							
									fail.
							 | 
						||
| 
								 | 
							
								t6.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								t6(V) :-
							 | 
						||
| 
								 | 
							
									bdd_new(X+(Y+X)*(-Z), BDD),
							 | 
						||
| 
								 | 
							
									bdd_tree(BDD, bdd(_, T, _Vs) ),
							 | 
						||
| 
								 | 
							
									reverse(T, RT),
							 | 
						||
| 
								 | 
							
									member(X, [0.3,0.7]),
							 | 
						||
| 
								 | 
							
									member(Y, [0.4,0.6]),
							 | 
						||
| 
								 | 
							
									member(Z, [0.9,0.1]),
							 | 
						||
| 
								 | 
							
									foldl(eval_prob, RT, _, V).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								eval_prob(pp(P,X,L,R), _, P) :-
							 | 
						||
| 
								 | 
							
									P is  X*L +  (1-X) * R.
							 | 
						||
| 
								 | 
							
								eval_prob(pn(P,X,L,R), _, P) :-
							 | 
						||
| 
								 | 
							
									P is  X * L + (1-X) * (1-R).
							 |