J'ai besoin de trouver un mot dans la liste de caractères et le supprimer de cela. Le prédicat ocurre ([Liste], [Word], [CleanList]).Trouver un mot dans la liste et le supprimer
[List] is a list of elements for example [a,b,c,d].
[Word] contains in a list the word that I must find in List for example [b,c]
[CleanList] return List with out Word (in the example [a,d])
Le programme est le suivant:
ocurre([X|LS],[X|P],Aux):- ocurre(LS,P,Aux),!.
ocurre([X|LS],[Y|P],Aux):- concatenar(Aux,[X],Aux2),
ocurre(LS,[Y|P],Aux2).
ocurre([],[],Aux):-!.
ocurre([],P,Aux):-!.
ocurre(LS,[],[Aux|LS]):-!.
concatenar([],X,X):-!.
concatenar([X|Y],R,[X|M]):- concatenar(Y,R,M).
Alors, quand je consulte ocurre([a,b,c,d] , [b,c] , L).
Mon retour du programme L=[]
et il doit retourner L=[a,d]
. Je ne sais pas ce qui ne va pas. J'apprécie votre aide
'delete' est en train de faire exactement cela. –
Pourquoi toutes les coupes? Vous devriez les supprimer. S'ils sont là parce que les résultats n'étaient pas ce que vous attendiez, alors c'est la mauvaise utilisation pour une coupe. Tout de suite, vos cas de base ne sont pas logiques. 'ocurre ([], [], Aux)' dit que si vous avez une liste vide et que vous supprimez des mots dans une autre liste vide, alors le résultat est quelque chose ('Aux', non instancié). Cela n'a pas de sens. Pourquoi la règle n'est pas 'ocurre ([], [], [])'? De même avec vos autres cas de base. Je soupçonne que vous avez beaucoup d'avertissements variables singleton que vous devriez aborder. – lurker