/****************************/ /* plug-in architecture */ /* of HCLP interpreter */ /* -----plug-in module----- */ /* RPB comparator component */ /* (c) R. Bart‡k */ /* 1996 */ /****************************/ % this module implements a regionally-predicate-better comparator for % general hierarchy solver (GHSmod.pr) % it is a plug-in module of plug-in architecture for HCLP % to get a complete comparator module, you need to define procedures % solve_constr, solve_constr_list (in FCSmod.pr) solve_level(Cs,PartAnsws,NewAnsws):- pre_solve_level(Cs,PartAnsws,[],NewAnsws,[],_). pre_solve_level([C|Cs],PartAnsws,OldAnsws,NewAnsws,OldMask,NewMask):- differ_answs(C,PartAnsws,PartSatAnsws,PartUnSatAnsws), differ_mask(SatMask,UnSatMask,OldMask), pre_solve_level(Cs,PartSatAnsws,OldAnsws,PreAnsws,SatMask,PreMask), append(SatMask,UnSatMask,TempMask), append(PreMask,TempMask,PostInMask), pre_solve_level(Cs,PartAnsws,PreAnsws,NewAnsws,PostInMask,PostMask), differ_mask(PreMask,PostMask,NewMask). pre_solve_level([],_,OldAnsws,OldAnsws,[_|_],[]):-!. pre_solve_level([],[],OldAnsws,OldAnsws,_,[]):-!. pre_solve_level([],CurrAnsws,OldAnsws,NewAnsws,[],[[]]):- CurrAnsws\=[], append(CurrAnsws,OldAnsws,NewAnsws). differ_answs(C,[A|As],RAs,[A|NAs]):- not solve_constr_list([C|A],[],_),!, differ_answs(C,As,RAs,NAs). differ_answs(C,[A|As],[[C|A]|RAs],NAs):- differ_answs(C,As,RAs,NAs). differ_answs(_,[],[],[]). differ_mask(PM,[M|T],[[n|M]|NT]):-!, differ_mask(PM,T,NT). differ_mask([M|T],NM,[[y|M]|NT]):- differ_mask(T,NM,NT). differ_mask([],[],[]). select_answer(A,As):- member(SelA,As), solve_constr_list(SelA,[],A). append([H|T],L,[H|NT]):- append(T,L,NT). append([],L,L).