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 :

2ème projet Prolog


Sujet :

Prolog

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 208
    Points
    208
    Par défaut 2ème projet Prolog
    bonsoir à toutes et à tous,
    Voilà j'ai un second projet toujours sur des connexions de train : je dois écrire un prédicat connection(X,Y) qui dit que l'on peut aller de X à Y en prenant un nombre de trains quelconque.
    J'ai la base de faits suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    train(bordeaux,montauban).
    train(montauban,toulouse).
    train(toulouse,montpellier).
    train(bordeaux,toulouse).
    train(toulouse,bordeaux).
    train(bordeaux,montpellier).
    J'ai écrit la règle suivante disant que l'on pouvait soit prendre un train direct soit prendre deux trains :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    connection_ind(X,Y):-train(X,Y);(train(X,Y1),train(Y1,Y)),!.
    Mais comment faire pour gérer les connections à 2/3 voire plus de trains ?
    Si quelqu'un sait faire merçi.
    A +

  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
    Il faut chercher au plus simple.
    Il y a connection de A vers B, s'il y un train de A vers B, mais aussi s'il y a un train de A vers C et une connection de C vers B !
    "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 actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 208
    Points
    208
    Par défaut
    Citation Envoyé par Trap D Voir le message
    Il faut chercher au plus simple.
    Il y a connection de A vers B, s'il y un train de A vers B, mais aussi s'il y a un train de A vers C et une connection de C vers B !
    Merçi encore à toi pour ta réponse, j'ai fait ce que tu m'as dis et ça fonctionne voiçi le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    train(bordeaux,montauban).
    train(montauban,toulouse).
    train(toulouse,montauban).
    train(bordeaux,toulouse).
     
    % connection(X,Y) si on peut aller de X à Y en prenant un nbre de trains quelconques
     
    conn(X,Y):-train(X,Y1),train(X,Y). % A vers B et A vers C (A ===> B et A ====> C)
    conn1(X,Y):-conn(X,Y),train(Y,Y1).  % C vers B (A ====> B et A ====> C puis C =====> B (A ===> B =====> C)
    Juste une petite remarque dans la 2ème règle (conn1) que l'on mette en base de fait soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    train(montauban,toulouse).
    train(toulouse,montauban).
    soit l'un ou l'autre ou soit les 2 ça marche alors que tu précises bien la connexion C vers B soit en principe seulement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    train(toulouse,montauban).
    Si tu sais pourquoi merçi
    A +

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 208
    Points
    208
    Par défaut réponse à moi même
    Citation Envoyé par xeron33 Voir le message
    Merçi encore à toi pour ta réponse, j'ai fait ce que tu m'as dis et ça fonctionne voiçi le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    train(bordeaux,montauban).
    train(montauban,toulouse).
    train(toulouse,montauban).
    train(bordeaux,toulouse).
     
    % connection(X,Y) si on peut aller de X à Y en prenant un nbre de trains quelconques
     
    conn(X,Y):-train(X,Y1),train(X,Y). % A vers B et A vers C (A ===> B et A ====> C)
    conn1(X,Y):-conn(X,Y),train(Y,Y1).  % C vers B (A ====> B et A ====> C puis C =====> B (A ===> B =====> C)
    Juste une petite remarque dans la 2ème règle (conn1) que l'on mette en base de fait soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    train(montauban,toulouse).
    train(toulouse,montauban).
    soit l'un ou l'autre ou soit les 2 ça marche alors que tu précises bien la connexion C vers B soit en principe seulement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    train(toulouse,montauban).
    Si tu sais pourquoi merçi
    A +
    pour "TRAP D"

    En fait après multes réflexion je pense avoir compris que Y1 peut être égal soit à Toulouse soit Montauban c'est pour ça que l'on a ce phénomène . MERCI de confirmer ou pas "Trap D"
    A +

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    conn(X,Y):-
      train(X,Y1),train(X,Y). 
    % A vers B et A vers C (A ===> B et A ====> C)
    conn1(X,Y):-
      conn(X,Y),train(Y,Y1).  
    % C vers B (A ====> B et A ====> C puis C =====> B (A ===> B =====> C)
    Il y a des choses qui ne vont pas dans ton code et qui devraient être signalées à la compil
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    conn(X,Y):-
      train(X,Y1),train(X,Y).
    Y1 n'est unifié avec rien, il peut donc prendre n'importe quelle valeur !
    De meme pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    conn1(X,Y):-
      conn(X,Y),train(Y,Y1).
    En plus si tu rajoutes train(toulouse, paris). tu verras que tu n'atteins jamais Paris depuis bordeaux alors que la liaison se fait par toulouse.

    En fait je vois beaucoup plus simple que celà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    connection(X,Y) :-
    	train(X,Y).
     
    connection(X,Y) :-
    	train(X,Z) ,
    	connection(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 actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 208
    Points
    208
    Par défaut
    Citation Envoyé par Trap D Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    conn(X,Y):-
      train(X,Y1),train(X,Y). 
    % A vers B et A vers C (A ===> B et A ====> C)
    conn1(X,Y):-
      conn(X,Y),train(Y,Y1).  
    % C vers B (A ====> B et A ====> C puis C =====> B (A ===> B =====> C)
    Il y a des choses qui ne vont pas dans ton code et qui devraient être signalées à la compil
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    conn(X,Y):-
      train(X,Y1),train(X,Y).
    Y1 n'est unifié avec rien, il peut donc prendre n'importe quelle valeur !
    De meme pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    conn1(X,Y):-conn(X,Y),train(Y,Y1),!.
    En plus si tu rajoutes train(toulouse, paris). tu verras que tu n'atteins jamais Paris depuis bordeaux alors que la liaison se fait par toulouse.

    En fait je vois beaucoup plus simple que celà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    connection(X,Y) :-
    	train(X,Y).
     
    connection(X,Y) :-
    	train(X,Z) ,
    	connection(Z,Y).
    Merçi pour ta réponse.
    Effectivement tu as raison, à la compil j'ai ce message pour les prédicats conn et conn1 :

    e:/seq.pl:141: warning: singleton variables [Y1] for conn/2
    e:/seq.pl:142: warning: singleton variables [Y1] for conn1/2

    Mais je n'ai fais que reproduire ce que tu m'avais dis soit : A vers B et A vers C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    conn(X,Y):-
      train(X,Y1),train(X,Y). % pour X = A , Y1 = B et Y = C
    et soit : C vers B
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    conn1(X,Y):-conn(X,Y),train(Y,Y1),!.   % pour Y1 = B et Y = C
    Peut être que c'est pas comme ça qu'il fallait le coder ?

    Dans mon code en rajoutant dans la base de faits :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    train(bordeaux,paris).
    train(paris,bordeaux).
    Là ça marche pour la requete :

    conn1(toulouse,paris).

    avec aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    train(bordeaux,toulouse).
    dans la base de faits.

    Merçi encore A +

  7. #7
    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
    Non, j'avais dit
    Il y a connection de A vers B, s'il y un train de A vers B, mais aussi s'il y a un train de A vers C et une connection de C vers B !
    c-a-d
    • Il y a connection de A vers B, s'il y un train de A vers B
    • Il y a connection de A vers B, s'il y un train de A vers C et une connection de B vers C
    "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

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 208
    Points
    208
    Par défaut
    Citation Envoyé par Trap D Voir le message
    Non, j'avais dit c-a-d
    Ok j'ai maintenant compris ton raisonnement.

    J'ai un autre problème à gérer, je dois écrire un prédicat connection(X,Y,N) qui dit qu'on peut aller de X à Y en prenant au plus N trains.

    J'ai écris ces deux règles qui gèrent les cas des 1 et 2 trains mais après comment aller plus loin ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    conn_N(X,Y,N):-train(X,Y),N is 1,!. % 1 train
    conn_N2(X,Y,M):-train(X,Z),conn_N(Z,Y,N),M is (N + 1),!.  % 2 trains
    Merçi
    A +

  9. #9
    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
    Inspire toi de ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    connection(X,Y) :-
    	train(X,Y).
     
    connection(X,Y) :-
    	train(X,Z) ,
    	connection(Z,Y).
    ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    conn_N(X,Y,N):-
       train(X,Y),N is 1,!. % 1 train
    conn_N2(X,Y,M):-
       train(X,Z),
       conn_N(Z,Y,N),M is (N + 1),!.  % 2 trains
    Attention, tu devrais toujours avoir le même prédicat conn_N et non pas conn_N et conn_N2.
    "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

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 208
    Points
    208
    Par défaut
    Citation Envoyé par Trap D Voir le message
    Inspire toi de ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    connection(X,Y) :-
    	train(X,Y).
     
    connection(X,Y) :-
    	train(X,Z) ,
    	connection(Z,Y).
    ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    conn_N(X,Y,N):-
       train(X,Y),N is 1,!. % 1 train
    conn_N2(X,Y,M):-
       train(X,Z),
       conn_N(Z,Y,N),M is (N + 1),!.  % 2 trains
    Attention, tu devrais toujours avoir le même prédicat conn_N et non pas conn_N et conn_N2.
    Oui merçi pour ta réponse, je me suis inspiré de ce code effectivement et j'ai écris ceci qui gère toujours 2 trains mais comment faire pour 3 trains et plus ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    conn_N(X,Y,N):-train(X,Y),N is 1,!.      % 1 train 
    conn_N(X,Y,N):-train(X,Z),connection(Z,Y),N is 2,!.   % 2 trains
    J'arrive pas à écrire quelque chose qui incrémente N.
    J'ai écris cette règle mais ça fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    conn_N(X,Y,M):-train(X,Z),connection(Z,Y),M  is (N + 1),!.
    J'ai le message suivant sous GNU Prolog :

    uncaught exception: error(instantiation_error,(is)/2)

    Voilà ou j'en suis si tu peux m'éclairer merçi
    A +

  11. #11
    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
    Erreur car N n'est unifié avec rien.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    conn_N(X,Y,N):-
       train(X,Y),N is 1,!.      % 1 train
    ceci peut s'écrire simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    conn_N(X,Y,1):-
       train(X,Y).      % 1 train
    Maintenant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    conn_N(X,Y,N):-train(X,Z),connection(Z,Y),N is 2,!.
    Pourquoi utilises-tu connection, conserve conn_N.
    je te laisse réfléchir.
    "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

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 208
    Points
    208
    Par défaut
    Citation Envoyé par Trap D Voir le message
    Erreur car N n'est unifié avec rien.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    conn_N(X,Y,N):-
       train(X,Y),N is 1,!.      % 1 train
    ceci peut s'écrire simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    conn_N(X,Y,1):-
       train(X,Y).      % 1 train
    Maintenant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    conn_N(X,Y,N):-train(X,Z),connection(Z,Y),N is 2,!.
    Pourquoi utilises-tu connection, conserve conn_N.
    je te laisse réfléchir.
    Non là je vois vraiment pas car si j'utilise conn_N il plante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    conn_N(X,Y,N):-conn_N(X,Z,N),train(Z,Y),N is (N + 1),!.
    je vois pas comment faire.
    A +

  13. #13
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    vous devez garder trace des nœuds déjà visités… sinon votre programme va cycler et exploser le stack…

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    legal_connection(X,Y, Trail) :- 
       (train(X,Y) ; train(Y,X)), \+(member(Y,Trail)).

  14. #14
    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
    Tout à fait, mais on n'en était pas encore à ce stade la...
    "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

  15. #15
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 208
    Points
    208
    Par défaut
    Citation Envoyé par JeitEmgie Voir le message
    vous devez garder trace des nœuds déjà visités… sinon votre programme va cycler et exploser le stack…

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    legal_connection(X,Y, Trail) :- 
       (train(X,Y) ; train(Y,X)), \+(member(Y,Trail)).
    Merçi pour votre réponse mais pourriez-vous m'expliquez un peu plus les termes "Trail" et "member" .
    Merçi

  16. #16
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par xeron33 Voir le message
    Merçi pour votre réponse mais pourriez-vous m'expliquez un peu plus les termes "Trail" et "member" .
    Merçi
    member/2 est un prédicat built-in qui est vrai si le premier argument est membre de la liste passée en deuxième argument

    Trail est la variable liste dans laquelle votre prédicat qui va parcourir le graphe va accumuler le chemin parcouru…

  17. #17
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 208
    Points
    208
    Par défaut
    Citation Envoyé par Trap D Voir le message
    Tout à fait, mais on n'en était pas encore à ce stade la...
    Pourrais-tu revenir à mon code et m'expliquer ce que je peux faire pour qu'il fonctionne pour 2 trains et plus .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    conn_N(X,Y,N):-train(X,Y),N is 1,!.      % 1 train 
    conn_N(X,Y,N):-conn_N(X,Z,N),train(Z,Y),N  is 2,!.   % 2 trains
    En raisonnant avec conn_N il plante comme je t'ai l'ai déjà dit.
    Merçi
    A +

  18. #18
    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
    Ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    conn_N(X,Y,N):-conn_N(X,Z,N),train(Z,Y),N is (N + 1),!.
    ne peut pas fonctionner, N ne pourra jamais être unifié avec N+1.
    Tu peux écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    conn_N(X,Y,N1):-
      conn_N(X,Z,N),
      train(Z,Y),
      N1 is (N + 1),!.
    Maintenant, il faut voir comment intégrer dans la recherche les gares déjà visitées, c'est l'utilité du Trail de JeitEmgie.
    A chaque qu'on passera dans une gare, il faudra la mémoriser.
    "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

  19. #19
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 208
    Points
    208
    Par défaut
    Citation Envoyé par Trap D Voir le message
    Ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    conn_N(X,Y,N):-conn_N(X,Z,N),train(Z,Y),N is (N + 1),!.
    ne peut pas fonctionner, N ne pourra jamais être unifié avec N+1.
    Tu peux écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    conn_N(X,Y,N1):-
      conn_N(X,Z,N),
      train(Z,Y),
      N1 is (N + 1),!.
    Maintenant, il faut voir comment intégrer dans la recherche les gares déjà visitées, c'est l'utilité du Trail de JeitEmgie.
    A chaque qu'on passera dans une gare, il faudra la mémoriser.
    Merçi pour ta réponse.
    Malgrés des efforts de compréhension je ne suis pas parvenu à résoudre mon problème .
    Je l'ai décomposé et j'ai fais tourner le prédicat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    legal_connection(X,Y,Trail):-(train(X,Y);train(Y,X)),\+(member(Y,Trail)).
    et pour la base de fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    train(bordeaux,montauban).
    Prolog me réponds "no" ce que je ne comprends pas car si j'ai bien compris le prédicat vérifie que c'est un train soit (bordeaux,montauban) soit (montauban,bordeaux) et que montauban ne soit pas dans Trail donc apparement puisqu'il me réponds "no" montauban est dans Trail, alors que je viens juste de le visiter.
    J'espère avoir été clair, si tu peux m'éclairer sur ce point seulement pour l'instant Merçi
    A +

  20. #20
    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
    Voici ce que j'obtiens avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    train(bordeaux,montauban).
     
    legal_connection(X,Y,Trail):-
    	(train(X,Y);train(Y,X)),
    	\+(member(Y,Trail)).
    et l'interrogation:
    2 ?- legal_connection(X,Y, []).
    X = bordeaux,
    Y = montauban ;
    X = montauban,
    Y = bordeaux ;
    false.
    Si tu as eu
    legal_connection(X,Y, T).
    false.
    c'est normal, en effet, T n'étant pas initialisé, member(Y, T) réussi toujours, regarde ce qui se passe ici :
    8 ?- member(a, Y).
    Y = [a|_G7959] ;
    Y = [_G7958, a|_G7962] ;
    Y = [_G7958, _G7961, a|_G7965] ;
    Y = [_G7958, _G7961, _G7964, a|_G7968] ;
    Y = [_G7958, _G7961, _G7964, _G7967, a|_G7971]
    Ce sont les joies du Prolog.
    "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. projet prolog Transport en commun
    Par diasgo dans le forum PCU
    Réponses: 0
    Dernier message: 30/04/2013, 01h03
  2. petit projet Prolog
    Par xeron33 dans le forum Prolog
    Réponses: 12
    Dernier message: 27/08/2009, 10h04
  3. SUDOKU projet PROLOG
    Par -queen- dans le forum Prolog
    Réponses: 5
    Dernier message: 01/06/2009, 10h56
  4. Besoin d'aide sur un Projet VB6 Access 2003 : 2ème partie
    Par jfdmagic dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 15/04/2009, 14h38

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