IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Prolog Discussion :

Supprimer toutes les occurences d'une liste


Sujet :

Prolog

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 17
    Points : 17
    Points
    17
    Par défaut Supprimer toutes les occurences d'une liste
    Bonjour,
    je débute en prolog et j'aimerais supprimer toutes les occurences d'une liste.
    Voici les prédicats :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    supprime(X,[],[]).
    supprime(X,[X|R],RsansX) :- supprime(X,R,RsansX),!.
    supprime(X,[P|R],[P|RsansX]) :- supprime(X,R,RsansX),!.
    Quand je rentre supprime(2,[3,5,2,1,2,8,2], R) j'ai bien R=[3,5,1,8]
    Mais si je rentre supprime(arc(_,a), [arc(b,a),arc(c,a),arc(d,a)],R) seul l'arc(b,a) est supprimé!

    Qu'est ce qui ne vas pas? J'ai fait la trace et il unifie _ avec b et garde le b!
    Que dois je faire?
    Merci de vos réponses.

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Difficile de te répondre comme ça, tu es victime de l'unification.

    [EDIT] Je viens de tester une méthode qui fonctionne : récupérer dans une liste tous les éléments qui satisfont au "template" X et les enlever ensuite 1 à 1. :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    supprime(_X,[],[]).
    supprime(X,[X|R],RsansX) :-
    	!,
    	supprime(X,R,RsansX).
     
    supprime(X,[P|R],[P|RsansX]) :-
    	supprime(X,R,RsansX),
    	!.
     
     
    sup(X, L, LsansX) :-
    	bagof(X, member(X, L), LX),
    	sup1(LX, L, LsansX).
     
    sup1([], L, L).
     
    sup1([H | T], L1, L) :-
    	sup1(T, L1, L2),
    	supprime(H, L2, L).
    Sortie
    24 ?- sup(arc(_,a), [arc(b,a),arc(c,a),arc(d,a)],R).
    R = [].

    25 ?- sup(2,[3,5,2,1,2,8,2], R).
    R = [3, 5, 1, 8].

    26 ?- sup(arc(_,a), [arc(b,a),arc(c,a),arc(d,a), arc(_, b)],R).
    R = [arc(_G600, b)].

    27 ?- sup(arc(_,a), [arc(b,a),arc(c,a),arc(d,a), arc(a, b)],R).
    R = [arc(a, b)].
    Mais j'avoue que cette méthode n'est pas très satisfaisante.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    Effectivement ça marche merci! Je regarderais le code plus en détail plus tard!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. compter le nombre de toutes les occurences d'une liste
    Par tom77380 dans le forum Général Python
    Réponses: 12
    Dernier message: 17/12/2011, 12h18
  2. algorithme pour enlever les occurences d'une liste
    Par bendenice dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 08/02/2006, 23h28
  3. connaitre toutes les occurences d'une chaine
    Par semaj_james dans le forum C
    Réponses: 2
    Dernier message: 11/12/2005, 14h46
  4. cmt selectionner tout les champ d'une liste deroulante
    Par mangamat dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 15/03/2005, 10h08
  5. Supprimer TOUTES les tables d"une bd
    Par perlgirl dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 14/12/2004, 12h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo