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 :

Aide probleme graphe


Sujet :

Prolog

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 19
    Points : 16
    Points
    16
    Par défaut Aide probleme graphe
    Bonjour,

    Je devient vraiment actif et dépendant du forum bien que j'essai d'éviter mais je suis completement desespéré...
    J'essai de faire un graphe suivant
    % a --- c
    %%%% | \
    %%%% | e
    %%%% | /
    % b --- d

    Voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    edge(a,c).
    edge(b,d).
    edge(c,d).
    edge(c,e).
    edge(d,e).
    path(X,Y) :- edge(X,Y).
    path(X,Y) :- edge(X,Z), path(Z,Y).
    J'essai d'éditer la regle de renvoyer true si on a une liaison avec 2 ou moins en edge
    Le code compile et marche mais voila que si je questionne
    ?- path(e,c).
    false.
    ?- path(c,e).
    true

    Je ne comprends pas trop... Ensuite est-ce que ma regle est correct? Cela définiti t'il bien qu'il faille 2 ou - en liaison pour renvoyer vrai?

    Merci d'avance

  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
    Tel que le graphe est défini, il n'y a pas de liaison entre e et c, donc path(e, c) échoue.
    Si le graphe n'est pas orienté, on peut ajouter la règle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    edge(X, Y) :- edge(Y, X).
    "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
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    Merci beaucoup Trap D vous êtes toujours présent pour m'aider je vous en suis tres reconnaissant.

    Je ne comprends pas pourquoi il n'y a pas de liaisons entre c et e, faire edge(c,e) ne donne pas aussi une liaison entre les deux? faut t'il faire edge(e,c)?

    Edit:

    Je viens de comprendre votre rajout Trap D, cela permet d'éviter de définir a l'envers car selon la façon dont je l'ai défini il semble être orienté donc votre regle permet de gagner du temps

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    Encore un autre soucis... si je fais
    path(a,e). Prolog ne répond plus de rien
    Même chose pour path(a,d). En fait des que les liaisons dépassent ou sont égales a deux points.

  5. #5
    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
    Oui, j'ai répondu un peu vite.
    En fait il faut créer une nouvelle règle qui exprime une liaison entre deux noeuds :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    liaison(X, Y) :-
        edge(X,Y); edge(Y,X).
    Celà permet d'avoir un résultat, et non une boucle, lorsque par exemple edge(a,d) n'est pas codé en dur.
    Maintenant, la règle path/2 peut s'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    path(X, Y) :-
    	liaison(X, Y).
     
    path(X, Y) :-
    	liaison(X, Z),
    	path(Z, Y).
    "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

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    Merci encore Trap D, vous êtes un chef! J'ai compris maintenant!

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

Discussions similaires

  1. [Conception] aide probleme de virgule
    Par kate59 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 18/02/2008, 09h30
  2. aide probleme compilation flux <<
    Par themulot dans le forum C++
    Réponses: 2
    Dernier message: 23/07/2007, 15h09
  3. besoin d'aide probleme taille tableau
    Par zhao dans le forum C++
    Réponses: 8
    Dernier message: 28/09/2006, 09h14
  4. [FORMULAIRE]besoin d'aide Probleme
    Par oops1980 dans le forum IHM
    Réponses: 7
    Dernier message: 07/09/2006, 16h27
  5. [debutant] aide probleme WinMain@16
    Par max---- dans le forum Windows
    Réponses: 5
    Dernier message: 14/03/2006, 12h46

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