:- module(xbif, [clpbn2xbif/3]). clpbn2xbif(Stream, Name, Network) :- format(Stream, ' ]> ~w]> ',[Name]), output_vars(Stream, Network), output_dists(Stream, Network), format(Stream, ' ',[]). output_vars(_, []). output_vars(Stream, [V|Vs]) :- output_var(Stream, V), output_vars(Stream, Vs). output_var(Stream, V) :- clpbn:get_atts(V,[key(Key),dist(DInfo)]), extract_domain(DInfo,Domain), format(Stream, ' ~w~n',[Key]), output_domain(Stream, Domain), format(Stream, '~n~n',[]). extract_domain(tab(D,_),D). extract_domain(tab(D,_,_),D). extract_domain((_->D),D). output_domain(_, []). output_domain(Stream, [El|Domain]) :- format(Stream, ' ~q~n',[El]), output_domain(Stream, Domain). output_dists(_, []). output_dists(Stream, [V|Network]) :- output_dist(Stream, V), output_dists(Stream, Network). output_dist(Stream, V) :- clpbn:get_atts(V,[key(Key),dist((Info))]), format(Stream, ' ~w~n',[Key]), output_parents(Stream,Info), extract_cpt(Info,CPT), output_cpt(Stream,CPT), format(Stream, '~n~n',[]). output_parents(_,tab(_,_)). output_parents(Stream,tab(_,_,Ps)) :- do_output_parents(Stream,Ps). output_parents(Stream,([_|_].Ps->_)) :- !, do_output_parents(Stream,Ps). output_parents(_,(_->_)). do_output_parents(_,[]). do_output_parents(Stream,[P1|Ps]) :- clpbn:get_atts(P1,[key(Key)]), format(Stream, '~w~n',[Key]), do_output_parents(Stream,Ps). extract_cpt(tab(_,CPT),CPT). extract_cpt(tab(_,CPT,_),CPT). extract_cpt(([C1|Cs]._->_),[C1|Cs]) :- !. extract_cpt((CPT->_),CPT). output_cpt(Stream,CPT) :- format(Stream, ' ', []), output_els(Stream, CPT), format(Stream, '
~n', []). output_els(_, []). output_els(Stream, [El|Els]) :- format(Stream,'~f ',[El]), output_els(Stream, Els).