# CLP - TP 7 ```prolog :-lib(ic). :-lib(ic_symbolic). :-local domain(genre(femme, homme)). % Tests effectués: % solve(P1, P2, Enfant). % Réponse : % P1 = homme % P2 = femme % E = homme % Yes (0.00s cpu) solve(Parent1, Parent2, Enfant):- poser_variables(Parent1, Parent2, Enfant), poser_affirmations(AffE, AffESelonP1, AffP1,Aff1P2, Aff2P2), contraindre(AffE, AffESelonP1, AffP1, Aff1P2, Aff2P2, Parent1, Parent2, Enfant), getVarList(Parent1, Parent2, Enfant, AffE, AffESelonP1, AffP1,Aff1P2, Aff2P2, Lsymb, Lnum), labeling_symbolic(Lsymb), labeling(Lnum). getVarList(Parent1, Parent2, Enfant, AffE, AffESelonP1, AffP1,Aff1P2, Aff2P2, Lsymb, Lnum):- Lsymb = [Parent1, Parent2, Enfant], Lnum = [AffE, AffESelonP1, AffP1, Aff1P2, Aff2P2]. poser_variables(Parent1, Parent2, Enfant):- Parent1 &:: genre, Parent2 &:: genre, Enfant &:: genre. poser_affirmations(AffE, AffESelonP1, AffP1,Aff1P2, Aff2P2):- AffE #:: 0..1, AffESelonP1 #:: 0..1, AffP1 #:: 0..1, Aff1P2 #:: 0..1, Aff2P2 #:: 0..1. contraindre(AffE, AffESelonP1, AffP1, Aff1P2, Aff2P2, Parent1, Parent2, Enfant):- Parent1 &\= Parent2, (Enfant &= femme) #= (AffESelonP1 #= 1), (AffP1 #= 1) #= (AffESelonP1 #= AffE), (Aff1P2 #= 1) #= (Enfant &= homme), (Aff2P2 #= 1) #= (AffE #= 0), affirme(Parent1, AffESelonP1), affirme(Parent2,Aff1P2,Aff2P2), affirme(Parent2, Aff1P2), affirme(Parent2, Aff2P2), affirme(Enfant, AffE). affirme(S, A):- (S&=femme) => (A#=1). affirme(S, A1, A2):- (S&=homme) => ((A1 + A2) #=1). labeling_symbolic([]). labeling_symbolic([Var|Liste]):- ic_symbolic:indomain(Var), labeling_symbolic(Liste). ```