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 :

Boucle infinie lors d'un parcours d'une liste


Sujet :

Prolog

  1. #1
    Membre du Club Avatar de cocosql
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 82
    Points : 59
    Points
    59
    Par défaut Boucle infinie lors d'un parcours d'une liste
    Bonsoir, j'ai écrit un prédicat qui parcourt une liste pour vérifier s'il y a des doublons.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    valid([]).
    valid([X|L]):- not member([X,L]), valid(L).
    si je passe directement une liste saisie à la main, du style :
    ça marche parfaitement, mais lorsque j'appelle ce prédicat depuis un autre prédicat et que valid renvoie faux (donc qu'il y a un doublon), j'ai une boucle infinie. Par contre, si valid renvoie vrai, il n'y a pas de boucle infinie. Le problème se produit donc quand valid renvoie faux.

    Sauriez-vous pourquoi ?

    Merci d'avance pour 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
    valid renvoyant faux, celà provoque backtrack, c'est pour celà que tu as une boucle infinie. Il faut traiter le cas sous cette forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    predicat :-
       .....
       (valid(X) -> <action lorsque valid réussit> ; <action lorsque valid echoue>),
       ....
    Le princpie est là mais ce serait bien que tu montres ton code pour juger exactement.
    "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 du Club Avatar de cocosql
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 82
    Points : 59
    Points
    59
    Par défaut
    Merci beaucoup, ca marche parfaitement bien, je n'ai plus de boucle infinie.

    En revanche comme le programme se termine après l'appel de ce prédicat, j'aimerais que "<action lorsque valid réussit>" soit une sorte d'instruction vide.
    Que puis-je mettre dans cette action?

    Merci encore!

  4. #4
    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
    Tu peux mettre true.
    "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. Réponses: 9
    Dernier message: 05/06/2015, 16h48
  2. Boucle infinie lors de l'exécution de SmsLib
    Par maevien dans le forum Java ME
    Réponses: 0
    Dernier message: 22/08/2013, 15h12
  3. Sortir d'une boucle infinie lors d'un «shutdown aimable»
    Par spoutniksurf dans le forum Adaptive Server Enterprise
    Réponses: 2
    Dernier message: 10/12/2010, 15h15
  4. Réponses: 9
    Dernier message: 05/06/2009, 09h26
  5. boucle infinie lors du test de la taille d'un champ
    Par paolo2002 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 10/04/2008, 09h51

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