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 :

Le pere du pere.


Sujet :

Prolog

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Le pere du pere.
    Bonjour,

    Je débute en prolog.
    J'ai une règle prolog "pere(x,y)", qui se lit "x est le père de y".
    J'aimerais pouvoir, avec cette règle uniquement, écrire "x est le père du père de y". Est ce possible?

    Le code actuel est donc :
    pere(x,y)->;

    Je peux donc écrire
    "pere(Jean,Paul);"
    mais puis-je écrire ceci :
    "pere(Jean, pere(x,Paul));"
    et est ce que ça se lirait bien comme je le veux?

    Si ce n'est pas le cas, y a t'il moyen d'écrire quelque chose comme ça :
    pere(x,y) pere(y,z)->;

    Je me doute que le mieux serait de noter
    grand_pere(x,y) -> pere(x,z) pere(z,y);
    Mais dans ce cas, j'aurais vite un problème quand je devrais écrire "Paul est le pere de la soeur du cousin de l'oncle du grand-pere de Marc"...

    Ou alors, à ce moment là, peut être vaut il mieux noter relation(x,l,y) où l est la liste des liens qui séparent Paul de Marc, donc "pere.soeur.cousin.oncle.grand_pere.nil", mais, une fois encore, je ne sais pas si je ne risque pas d'avoir des problèmes lorsque j'aurais à déduire d'une relation compliquée une relation plus simple telle que
    relation(x,epouse.nil,y) -> relation(x,mere.fils.nil,y);

    Merci d'avance, cordialement,
    Zelarith.

    PS : J'utilise Prolog II+.

  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
    A mon avis, mais ça n'engage que moi, si on veut généraliser, le mieux est d'avoir la liste comme évoqué dans relation(x,l,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

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Ouaip, je crois que je vais bel et bien partir sur l'idée de relation(x,l,y), je rencontrait trop de problème avec l'autre schéma de données et je bloquait sur plusieurs fronts sur lesquels je ne devrait plus avoir de problèmes si j'utilise relation. J'espère que je n'en aurait pas de nouveaux qui vont émerger par la même occasion!

    Merci

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 10
    Points : 20
    Points
    20
    Par défaut
    Prière de m'excuser du déterrage de topic ... surtout pour un topic résolu, mais il me paraît important de préciser une possibilité qui n'a pas été approfondie ...

    Si j'ai bien saisi le sujet, vous souhaiteriez réaliser une sorte d'arbre généalogique ... à partir de notions de bases telles que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pere(P,E). = P est le père de E
    mere(M,E). = M est la mère de E
    Rien qu'avec ces deux prédicats, il est possible de déterminer les grands-parents. En effet, si on souhaite déterminer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    grandpere(P,E). = P est le grand-père de E
    grandmere(M,E). = M est la grand-mère de E
    P est le grand-père de E si P est le père de X et que X est le père OU la mère de E
    Même principe pour M, est la grand-mère de E si M est la mère de X et que X est le père OU la mère de E.

    Rien de très difficile non plus pour les deux prédicats fils et fille définit ci-après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fils(F,X). = F est le fils de X
    fille(F,X). = F est la fille de X
    F est le fils de X si X est le père ou la mère de F, de même pour F est la fille de X.

    Mais le plaisir de se "promener" dans un arbre généalogique ne s'arrête pas là ! On peut être amené à chercher les frères et les sœurs. Le soucis que l'on rencontre est que si notre individu n'est ni un père, ni une mère, on a des difficultés à déterminer si c'est un garçon ou une fille. D'où la possibilité d'ajouter deux prédicats de base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    homme(X). = X est un homme
    femme(X). = X est une femme
    Ainsi, on peut continuer sur la piste des frères, sœurs, beaux-frères, belles-sœurs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    frere(X,Y). = X est le frère de Y
    soeur(X,Y). = X est la sœur de Y
    beaufrere(X,Y) = X est le beau-frère de Y
    bellesoeur(X,Y) = X. est la belle-sœur de Y
    Pour les frères et sœurs, X est le frère (ou la soeur) de Y si le père de X est le père de Y et que la mère de X est la mère de Y tel que X soit différent de Y (une évidence )

    Pour les beaux-frères et belles-sœur, X est le beau-frère (ou la belle-sœur) de Y si [ le père de X est le père de Y et que la mère de X n'est pas la mère de Y] OU [ la mère de X est la mère de Y et le père de X n'est pas le père de Y] tel que X soit différent de Y.

    Pour la définition d'époux et d'épouse, on peut abusivement considérer que si X et Y ont au moins un enfant ensemble ils sont mariés ? Même si ce n'est pas toujours le cas. Le mieux reste d'améliorer les prédicats de base en précisant par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    marriage(X,Y). = X est marié à Y
    Ainsi, il devient évident de définir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    epoux(X,Y). = X est l'époux de Y
    epouse(X,Y). = X est l'épouse de Y
    En effet, X est l'époux de Y si X est un homme et si on a marriage(X,Y) ou marriage(Y,X).
    (Ne soyons pas sexiste dans l'ordre du mariage ...).
    Même principe, X est l'épouse de Y si X est une femme et si on a marriage(X,Y) ou marriage(Y,X).

    On peut même après s'amuser après à trouver les enfants hors-mariage, .... Mais voilà, il est possible de créer les liens entres des individus avec quelques prédicats simples.

    Je joins un exemple par rapport à tout ce que j'ai pu dire ci-dessus.

    Cdt,
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 30/12/2005, 14h53
  2. modeliser relation pere fil
    Par flawer dans le forum Débuter
    Réponses: 20
    Dernier message: 12/12/2005, 11h59
  3. Le process fils doit mourir a la mort du pere!!
    Par dudur001 dans le forum Langage
    Réponses: 4
    Dernier message: 09/11/2005, 09h02
  4. Hibernate et les relations pere/enfant
    Par kurkLord dans le forum Hibernate
    Réponses: 6
    Dernier message: 19/01/2005, 04h37
  5. [reseaux] Fais dodo, process, mon p'tit père....
    Par GLDavid dans le forum Programmation et administration système
    Réponses: 22
    Dernier message: 14/07/2004, 15h20

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