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 :

Permuter des listes de sous-listes


Sujet :

Prolog

  1. #1
    Invité
    Invité(e)
    Par défaut Permuter des listes de sous-listes
    Bonjour,

    Je souhaite créer un prédicat rechercher /2 qui prend en paramètre une liste de sous-listes et qui retourne toutes les permutations possibles de ces sous-listes concaténées.

    En gros, si je fais: rechercher(L,[[1,2],[3,4]]). Ça me retourne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    L = [1,2,3,4];
    L = [1,2,4,3];
    L = [2,1,3,4];
    L = [2,1,4,3].
    Actuellement, mon prédicat rechercher est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rechercher(_,[[]]):- !.
    rechercher(Res,[L1|L2]):- permutation(L11,L1), rechercher(L22,[L2]), grouperListes(Res,[L11|L22]).
    Je permute la première sous-liste de la liste avec le prédicat permutation (Un prédicat qui fonctionne et qui retourne toutes les permutations possibles), j'appelle rechercher récursivement pour qu'il me trouve toutes les permutations possibles de toutes les autres sous-listes, puis j'appelle un prédicat grouperListes (qui fonctionne également), et qui concatène toutes les permutations trouvées entre elles. Malheureusement, mon prédicat rechercher me renvoie L = [1,2,3,4]; à l'infini.
    Je ne comprends pas trop pourquoi, j'ai cherché longtemps, mais je ne trouve pas de solution à mon problème. Pouvez-vous m'aider ?
    Merci d'avance,
    Decim298.
    Dernière modification par Invité ; 12/12/2018 à 23h44. Motif: Ajout des balises [CODE] et [C]

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 947
    Par défaut
    Bonjour.
    Il faudrait voir le code complet pour trouver l'erreur.
    "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
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Trap D Voir le message
    Bonjour.
    Il faudrait voir le code complet pour trouver l'erreur.
    Comme je l'ai dit, mes autres fonctions fonctionnent correctement. Mais voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    selection(T,Q,[T|Q]).
    selection(X,[T|Q2],[T|Q]):-selection(X,Q2,Q).
     
    permutation([],[]).
    permutation([TR|QR],L):-selection(TR,L2,L), permutation(QR,L2).
     
    concatener(L,[],L):- !.
    concatener([T1|QR],[T1|Q1],L2):-concatener(QR,Q1,L2).
     
    grouperListes([],[]).
    grouperListes(Liste,[Liste1|ListeX]):-grouperListes(Liste2,ListeX), concatener(Liste,Liste1,Liste2).
     
    rechercher(_,[[]]):- !.
    rechercher(Res,[L1|L2]):- permutation(L11,L1), rechercher(L22,[L2]), grouperListes(Res,[L11|L22]).

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 947
    Par défaut
    C'était pour m'assurer qu'il n'y avait pas un truc caché.
    Le problème vient de cette clause :
    rechercher(_,[[]]):- !.
    Essayer de trouver pourquoi !
    Quand la recherche doit-elle s'arrêter ?
    "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

Discussions similaires

  1. Couleur listes et sous-listes
    Par Perceuse-Killer dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 27/05/2010, 14h59
  2. Creation d'une liste de sous liste
    Par alcibiade dans le forum Général Python
    Réponses: 16
    Dernier message: 19/12/2009, 13h15
  3. Permuter des valeurs entre deux listes
    Par doogybreton dans le forum IHM
    Réponses: 2
    Dernier message: 14/12/2007, 22h42
  4. Inversion listes et sous-listes
    Par yoshï dans le forum Prolog
    Réponses: 6
    Dernier message: 25/11/2007, 19h42
  5. Réponses: 2
    Dernier message: 16/11/2007, 12h44

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