1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| % oter(Arg1, Arg2, Arg3, Arg4)
% Arg1 liste des états à traiter
% Arg2 liste de référence contenant les états dejà rencontrés
% Arg3 liste en construction contient les états corrects, au départ c'est []
% Arg4 recupère la liste définitive
% appel par oter(ATester, Vu, [], X).
% quand la liste à tester est vide,
% on unifie les deux derniers paramètres
oter([], _, X, X).
% On regarde le premier élément de la liste à tester
% s'il est présent dans la liste Vu,
% on continue l'opération oter avec B et les autres arguments
% sinon
% on mémorise A dans X en utilisant une liste intermédiaire X1
% et on continue avec B, Vu, X1 et Y
oter([A|B], Vu, X, Y) :-
member(A, Vu) -> oter(B, Vu, X, Y);(append([A], X, X1), oter(B, Vu, X1, Y)). |
Partager