Prolog, suppression d'éléments d'une liste

Fermé
Misssev95 - 29 nov. 2010 à 22:31
Bonjour,

J'ai un projet en cours, qui a pour but de créer un système expert. Pour cela on déclare des objets, et ces objets comporte des caractéristiques déclarés comme suit :

% un objet est defini par ses caracteristiques :
caracteristique(paris, fluviale, oui).
caracteristique(clermont, fluviale, non).

:-dynamic(caracteristique/3).

% declaration d'une caracteristique
declare(Objet, Carac, Reponse) :-
asserta(caracteristique(Objet, Carac, Reponse)).

Par la suite, on construit cette liste de caractéristiques :

% construction de la liste des caracteristiques
listeCaracteristique(Liste) :-
setof(Carac, Objet^Valeur^caracteristique(Objet, Carac, Valeur), Liste),!.
listeCaracteristique([]).

j'ai ensuite écrit un code pour supprimer une caractéristique de la liste :

%supprimer une caractéristique
supp(Carac,[Carac|Q],Q2):-supp(Carac,Q,Q2),retract(listeCaracteristique(Carac)).
supp(Carac,[T|Q],[T,Q2]):- T\==Carac,supp(Carac,Q,Q2),retract(listeCaracteristique(Carac)).
supp(_,[],[]).

Mais après quand je lui demande la liste des caractéristiques, il me remet l'élément supprimé. Je ne vois pas comment coder ma liste de caractéristique pour qu'il tienne compte de cette suppression.

Merci pour vos réponses