Code Prolog de l'algorithme anticipation/noeud

anticipation(Affectation) :-
variables(Variables),
anticipation(Variables,[],Affectation).

anticipation([],_,[]).
anticipation([X:DX|Variables],AffectationPartielle,[(X,V)|Solution]) :-
member(V,DX),
filtre(X,V,Variables,VariablesFiltres),
anticipation(VariablesFiltres,[(X,V)|AffectationPartielle],Solution).

filtre(_,_,[],[]).
filtre(Xi,Vi,[Xj:Dj|Variables],[Xj:DjFiltre|DomainesFiltres]) :-
bagof(Vj, (member(Vj,Dj),consistants((Xi,Vi),(Xj,Vj))), DjFiltre),
DjFiltre \= [],
filtre(Xi,Vi,Variables,DomainesFiltres).