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 :

Problème traitement récursif !


Sujet :

Prolog

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 15
    Points : 9
    Points
    9
    Par défaut Problème traitement récursif !
    Bonjour,

    je rencontre un problème dans le code suivant :
    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
    20
    21
    22
    23
    24
    25
    26
     
    sujet(carl).
    sujet(bob).
    sujet(alice).
    objet(bank1).
    objet(bank2).
    objet(bank3).
    objet(bank4).
    data(x).
    data(y).
    data(w).
    data(z).
    CR(carl,bank2).
    CR(co1,alice).
    CR(alice,bank1).
    CR(alice,bank3).                  
    CR(bob,bank1).
    CW(carl,bank4).
    CW(bob,bank3).
    CW(alice,bank3).
    CW(bob,bank1).
    CK(bob,x).
    CS(bank2,w).
    CS(bank4,w).
    CK(alice,z).
    CK(carl,z).
    A partir des CS et CK définit dans la base comme fait , je veux trouver toutes les autres relations CK et CS sachant les deux règles suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CK(S,X):- CS(O,X),CR(S,O).
    CS(O,X):- CK(S,X),CW(S,O).
    comme vous pouvez voir les deux relations sont dépendantes , j'ai pensé a un traitement récursives mais je trouve pas vraiment des bons résultat.
    comment modifier les deux règles pour avoir le résultat souhaité ?

    Merci.

  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
    C'est un peu confus, à partir de ta base, quels sont les résultats attendus pour les relations cs et ck. (Attention les noms des prédicats doivent commencer par des minuscules).
    "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
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    oui c'est un peu confus , je vais essayer de mieux expliquer :

    a partir de la base et utilisant la première règle de ck
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ck(S,X):- cs(O,X),cr(S,O).
    on obtient le résultat suivant :
    maintenant on utilisant la base et le résultat précédent je dois trouver les résultats suivant pour la deuxième règle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     cs(bank3,x).
    cs(bank3,z).
    cs(bank4,z).
    cs(bank4,w).
    Apres je dois faire appel a ses résultats dans la première règle j'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     ck(alice,x)
    ck(alice,z)
    ensuite je fais appel a ses résultats dans la deuxième règle ... , on voit que chaque règle utilise les résultat de l'autre règle . Je dois refaire ce processus jusqu’à l'obtention de tous les résultats .
    j'aurais besoin de deux règles qui me donnent tous les résultats ck et cs selon le raisonnement que je viens d'expliquer.

    j’espère que c'est vraiment clair .

  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
    Je ne sais pas du tout si ça répond à ton problème, j'ai un peu modifié le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    cs_(O,X):- ck(S,X),cw(S,O).
    m(S,X) :- cs_(O,X), cr(S,O).
    Le prédicat cs_/2 remplace le prédicat cs/2.
    J'obtiens
    ?- m(X,Y).
    X = alice,
    Y = x ;
    X = alice,
    Y = x ;
    X = bob,
    Y = x ;
    X = alice,
    Y = z ;
    false.
    "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

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    c'est pas vraiment çà, mais je vais ré-expliquer :

    il faut prendre les cs et le ck qui sont dans la base comme une initialisation (tout comme les autres langages de programmation).

    1/après cela le cs présent dans la première règle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ck(S,X):- cs(O,X),cr(S,O).
    doit être unifié une première fois avec les cs initial (de la base) . on obtient des résultats ck .
    2/on passe a la deuxième règle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cs(S,O):- ck(S,X),cw(S,O).
    . le ck dans cette règle doit être unifié avec les ck initial de la base, mais aussi avec les ck résultants de la première règle. On obtient des résultats cs.
    3/on repasse a la première règle , cette fois le cs de la règle sera unifié avec les cs résultants de l’étape précédentes ( étape 2 )..


    ainsi de suite jusqu’à l'obtention de tous les résultats cs et ck

Discussions similaires

  1. [DOM] Problème de traitement récursif, nombre de noeuds fils
    Par erivoil dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 13/12/2006, 12h39
  2. [Tableaux] Problème algo récursif
    Par Invité dans le forum Langage
    Réponses: 38
    Dernier message: 03/10/2006, 15h49
  3. problème traitement formulaire cgi(débutant)
    Par Shyboy dans le forum Web
    Réponses: 13
    Dernier message: 02/07/2006, 18h17
  4. Traitement récursif ?
    Par Neilos dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/08/2005, 22h30
  5. problème algorithme récursif
    Par seb888 dans le forum Général Java
    Réponses: 11
    Dernier message: 04/06/2005, 21h35

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