:- 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).