en utilisant le prédicat annonce de SWI-Prolog (ou prédicat de SICStus dans sa bibliothèque de liste), nous avons:Prolog - Différence entre deux listes, mais
lists:subtract([], _, []) :- !.
lists:subtract([A|C], B, D) :-
memberchk(A, B), !,
subtract(C, B, D).
lists:subtract([A|B], C, [A|D]) :-
subtract(B, C, D).
qui fait cela avec succès:
?- subtract([2,3,4,5],[3,4],X).
X = [2, 5].
MAIS , si je veux faire:
?- new_subtract([2,3,4,5],[3,X],Y).
X = [3, 2],
X = [3, 4],
X = [3, 5],
Y a alors trois solutions en prenant les trois solutions X de [2,3,4,5].
Cependant, soustraire/2 ne le permet pas.
J'ai essayé de résoudre cela depuis des lustres en retirant les découpes (!) S du corps du prédicat construit pour essayer de le faire revenir en arrière et trouver toutes les solutions.
Merci encore larsmans , c'est tellement simple maintenant je le vois !! Continuez votre bon travail :). – ale