J'ai besoin d'aide avec une routine que j'essaie de créer. Je dois faire une routine qui ressemble à quelque chose comme ceci:routine de différence Prolog
difference([(a,b),(a,c),(b,c),(d,e)],[(a,_)],X).
X = [(b,c),(d,e)].
J'ai vraiment besoin d'aide sur celui-ci ..
J'ai écrit une méthode jusqu'à présent qui peut enlever la première occurrence qu'il trouve. Cependant, j'en ai besoin pour supprimer toutes les occurrences. Voici ce que j'ai jusqu'à présent ...
memberOf(A, [A|_]).
memberOf(A, [_|B]) :-
memberOf(A, B).
mapdiff([], _, []) :- !.
mapdiff([A|C], B, D) :-
memberOf(A, B), !,
mapdiff(C, B, D).
mapdiff([A|B], C, [A|D]) :-
mapdiff(B, C, D).
J'ai pris ce code de la liste (soustraire).
Je ne comprends pas complètement ce qu'il fait, mais je sais que c'est presque ce que je veux. Je n'ai pas utilisé de soustraction car mon code final doit être compatible avec WIN-Prolog ... Je le teste sur SWI Prolog.
Votre code fonctionne pour moi (dans SWI-Prolog et GNU-Prolog). Je ne connais pas WIN-Prolog, donc je ne peux pas vous aider là-bas. – Stephan202
Eh bien cela fonctionne mais il ne supprime pas toutes les occurrences de A. Il supprime seulement le premier. – SteveW
Vous avez raison. D'une certaine façon, j'avais l'air mal (?). Je pense que le problème est que la vérification des membres effectue l'unification, et par conséquent après le premier test '(a, _)' devient '(a, b)', qui ne correspondra plus à '(a, c)'. Je pense à une bonne solution ... – Stephan202