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 :

Prédicat en Prolog


Sujet :

Prolog

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2018
    Messages : 4
    Par défaut Prédicat en Prolog
    Bonjour,

    J'ai un projet en prolog mais je suis actuellement bloqué sur une question.

    J'ai des faits qui sont définis comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    noeud(Index0, personne0).
    noeud(Index1,personne1).
    noeud...
     
    lien(Index0,Index4).
    lien(Index0,Index1).
    lien...
    Et je voudrai un prédicat intermédiaires(personne0,personne1,N) qui me renvoie dans N le nombre d'amis intermédiaires entre personne0 et personne1.

    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 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 947
    Par défaut
    Je voudrais savoir ce que vous avez tenté
    "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
    Mai 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2018
    Messages : 4
    Par défaut
    Bonjour Trap,

    J'ai tenté ça :

    Code prolog : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    intermediaires(Nom1,Nom2,N) :-
        Nom1 == Nom2, N = 0;
     
        setof(X,noeud(X,Nom1),L1),
        nth0(0,L1,Index1),
        setof(Z,noeud(Z,Nom3),L3),
        nth0(0,L3,Index3),
     
            (lien(Index1,Index3); lien(Index3,Index1)),
            intermediaires(Nom3,Nom2,N1), N is N1+1.

  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
    Bonjour
    Avant de continuer, je veux être sûr
    • une personne ne peut appartenir qu'à un seul noeud(X, Personne)
    • un index ne peut appartenir qu'à un seul noeud.

    En gros on ne peut pas avoir

    noeud(index0, personne0).
    noeud(index0, personne1).
    ni
    noeud(index0, personne0).
    noeud(index1, personne0).
    "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
    Mai 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2018
    Messages : 4
    Par défaut
    Oui c'est exactement ça !

  6. #6
    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
    Ok, donc c'est assez simple
    Cas de base, il existe un lien entre les deux index des personnes 1 et 2. (au passage dans la base de faits, il faut écrire noeud(index0, personne0). avec un 'i' minuscule à index et non pas noeud(Index0, personne0).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    intermediaires(Nom1,Nom2,0) :-
       noeud(X, Nom1),
       lien(X,Y),
       noeud(Y, Nom2),
       !.
    Il faut envisager le cas ou lien(X,Y) n'existe pas mais lien(Y,X) existe.
    Ensuite on envisage les intermédiaires
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    intermediaires(Nom1,Nom2,N) :-
        noeud(X, Nom1),
        lien(X,Y),
        noeud(Y, NomTemp),
        ....
    Je vous laisse écrire la suite. Attention aux cycles possibles
    "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

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2018
    Messages : 4
    Par défaut
    Merci beaucoup Trap ça marche. Voilà ce que j'ai mis !

    Code prolog : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    intermediaires(Nom1,Nom2,0) :-
    	noeud(X,Nom1),
    	lien(X,Y),
    	noeud(Y,Nom2), !.
     
    intermediaires(Nom1,Nom2,N) :-
    	noeud(X,Nom1),
    	lien(X,Y),
    	noeud(Y,NomTemp),
    	intermediaires(NomTemp,Nom2,N1), N is N1+1.

    Par contre, le prédicat est orienté j'aimerai bien qu'il soit non orienté.
    En gros :

    intermédiaires(Nom1,Nom2,N) := intermédiaires(Nom2,Nom1,N).

    Merci encore !

Discussions similaires

  1. Appel de prédicats / règles prolog via http
    Par jfv.work dans le forum Prolog
    Réponses: 9
    Dernier message: 13/01/2011, 15h40
  2. prédicat permut prolog
    Par xeron33 dans le forum Prolog
    Réponses: 31
    Dernier message: 11/10/2010, 00h02
  3. prédicat plus_cher Prolog
    Par xeron33 dans le forum Prolog
    Réponses: 10
    Dernier message: 14/11/2009, 09h59
  4. Calcul des prédicats dans prolog
    Par nschoe dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 01/11/2008, 01h56
  5. Réponses: 1
    Dernier message: 09/01/2007, 15h33

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