added the possibility of having builtin predicates

git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@2132 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
rzf 2008-03-08 15:39:43 +00:00
parent 186d4e0687
commit 0d7427ad83

View File

@ -41,13 +41,14 @@ setting(cpt_zero,0.0001).
GoalsLis can have variables, s returns in backtracking all the solutions with GoalsLis can have variables, s returns in backtracking all the solutions with
their corresponding probability */ their corresponding probability */
s(GL,P):- s(GL,P):-
setof(Deriv,find_deriv(GL,Deriv),LDup), setof(Deriv,find_deriv(GL,Deriv),LDup),!,
append_all(LDup,[],L), append_all(LDup,[],L),
remove_head(L,L1), remove_head(L,L1),
remove_duplicates(L1,L2), remove_duplicates(L1,L2),
build_ground_lpad(L2,0,CL), build_ground_lpad(L2,0,CL),
convert_to_clpbn(CL,GL,LV,P). convert_to_clpbn(CL,GL,LV,P).
s(_GL,0.0).
/* sc(GoalsList,EvidenceList,Prob) compute the probability of a list of goals /* sc(GoalsList,EvidenceList,Prob) compute the probability of a list of goals
GoalsList given EvidenceList. Both lists can have variables, sc returns in GoalsList given EvidenceList. Both lists can have variables, sc returns in
backtracking all the solutions with their corresponding probability backtracking all the solutions with their corresponding probability
@ -137,11 +138,41 @@ process_goals([H|T],[HG|TG],[HV|TV]):-
build_ground_lpad([],_N,[]). build_ground_lpad([],_N,[]).
build_ground_lpad([(R,S)|T],N,[(N1,Head,Body)|T1]):- build_ground_lpad([(R,S)|T],N,[(N1,Head1,Body1)|T1]):-
rule(R,S,_,Head,Body), rule(R,S,_,Head,Body),
N1 is N+1, N1 is N+1,
merge_identical(Head,Head1),
remove_built_ins(Body,Body1),
build_ground_lpad(T,N1,T1). build_ground_lpad(T,N1,T1).
remove_built_ins([],[]):-!.
remove_built_ins([\+H|T],T1):-
builtin(H),!,
remove_built_ins(T,T1).
remove_built_ins([H|T],T1):-
builtin(H),!,
remove_built_ins(T,T1).
remove_built_ins([H|T],[H|T1]):-
remove_built_ins(T,T1).
merge_identical([],[]):-!.
merge_identical([A:P|T],[A:P1|Head]):-
find_identical(A,P,T,P1,T1),
merge_identical(T1,Head).
find_identical(_A,P,[],P,[]):-!.
find_identical(A,P0,[A:P|T],P1,T1):-!,
P2 is P0+P,
find_identical(A,P2,T,P1,T1).
find_identical(A,P0,[H:P|T],P1,[H:P|T1]):-
find_identical(A,P0,T,P1,T1).
convert_to_clpbn(CL,GL,LV,P,GLC):- convert_to_clpbn(CL,GL,LV,P,GLC):-
find_ground_atoms(CL,[],GAD), find_ground_atoms(CL,[],GAD),
remove_duplicates(GAD,GANull), remove_duplicates(GAD,GANull),