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 :

[Débutant] Analyse de famille


Sujet :

Prolog

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut [Débutant] Analyse de famille
    Bonjour à tous,

    Voilà mon problème : je débute en Prolog et j'écris à titre d'exemple une analyse de la famille au sens liens familiaux.
    Mais voilà, je bloque aux premiers prédicats frere et soeur.
    Je voudrais écrire que si frere(X,Y)=vrai alors frere(Y,X)=vrai sauf si Y est une fille et sauf si le prédictat frere(Y,X) est déjà défini. Et tous ça sans boucle infinie.

    Je poste la totalité de mon code; plein d'erreurs sont présentes.
    Je précise aussi que j'ai lu tous les tutoriels présents sur le site.

    Merci d'avance pour votre aide.
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    /***********************************************
    		LA FAMILLE
    ***********************************************/
     
    /***************** Les faits *******************/
    /*personne(nom,prenom,age,sexe).*/
    /*personne(nom,prenom,prenom2,sexe,date_naissance,lieu_naissance,date_mort,sexe).*/
    personne(toto,yann,31,homme).
    personne(toto,yven,29,homme).
    personne(lafu_toto,jacqueline,56,femme).
    personne(lafu,germaine,86,femme).
    personne(lafu,gervaise,56,femme).
    personne(lafu,jean,50,homme).
    personne(toto,madeleine,80,femme).
    personne(toto,alain,52,homme).
    personne(toto,raymond,100,homme).
    personne(lafu,robert,100,homme).
     
    frere(yann,yven).
    pere(yann,alain).
    pere(henri4,louis13).
    mere(yann,jacqueline).
    mere(alain,madeleine).
    mere(jacqueline,germaine).
    pere(alain,raymond).
    pere(jacqueline,robert).
     
    /***************** Les regles *******************/
    /*homme et femme et same*/	
    homme(X):-personne(_,X,_,homme),!.
    femme(Y):-personne(_,Y,_,femme),!.
     
    /*frere echec si x==y ou si y fille ou si frere deja defini*/	
    frere(X,Y):-X==Y,!,fail.
    frere(X,Y):-femme(Y),!,fail.
    frere(X,Y):-frere(X,Y),!,fail.
    frere(X,Y):-frere(Y,X),!.
     
    /*soeur echec si x==y ou si y homme ou si soeur deja defini*/	
    soeur(X,Y):-X==Y,!,fail.
    soeur(X,Y):-homme(Y),!,fail.
    soeur(X,Y):-soeur(X,Y),!,fail.
    soeur(X,Y):-soeur(Y,X),!.
     
    freresoeur(X,Y):-(frere(X,Y);soeur(X,Y)),!.
     
    pere(X,Y):-(pere(Z,Y),freresoeur(Z,X));enfant(Y,X),!.
    mere(X,Y):-(mere(Z,Y),freresoeur(Z,X));enfant(y,X),!.
    enfant(ALAIN,X):-(fils(ALAIN,X);fille(ALAIN,X)),!.
    parents(X,Y,Z):-pere(X,Y),mere(X,Z),!.
    parent(X,Y):-(pere(X,Y);mere(X,Y)).
    fils(X,Y):-parent(Y,X),homme(Y),!.
    fille(X,Y):-parent(Y,X),femme(Y),!.
    grandpere(X,Y):-(pere(X,Z);mere(X,Z)),pere(Z,Y),!.
    grandmere(X,Y):-(pere(X,Z);mere(X,Z)),mere(Z,Y),!.
     
    enfant(Y,X):-bio(Y,_,_,_,X,_),!.
    enfant(Y,X):-bio(Y,_,_,_,_,X),!.
    petitenfant(Y,X):-enfant(Y,Z),enfant(Z,X),!.
    descendant(Y,X):-enfant(Y,X),!.
    descendant(Y,X):-enfant(Y,Z),descendant(Z,X),!.
     
     
    same(X,X).
     
     
    messageFamille :- nl,nl,
       write('    ****************************************************************'), nl, 
       write('    *  REGLES DE LA FAMILLE                                        *'), nl,
       write('    *    ?-  frere(FRERE1,FRERE2).                                 *'), nl,
       write('    *    ?-  soeur(FRERE1,FRERE2).                                 *'), nl,
       write('    *    ?-  pere(FRERE1,FRERE2).                                 *'), nl,
       write('    *    ?-  mere(FRERE1,FRERE2).                                 *'), nl,
       write('    *    ?-  grandpere(FRERE1,FRERE2).                                 *'), nl,
       write('    *    ?-  grandmere(FRERE1,FRERE2).                                 *'), nl,
       write('    *    ?-  fils(FRERE1,FRERE2).                                 *'), nl,
       write('    *    ?-  fille(FRERE1,FRERE2).                                 *'), nl,
       write('    *    ?-  homme(FRERE1,FRERE2).                                 *'), nl,
       write('    *    ?-  femme(FRERE1,FRERE2).                                 *'), nl,
       write('    *    ?-  enfant(FRERE1,FRERE2).                                 *'), nl,
       write('    *    ?-  petitenfant(FRERE1,FRERE2).                                 *'), nl,
       write('    *    ?-  descendant(FRERE1,FRERE2).                                 *'), nl,
       write('    *    ?-  ancetres(FRERE1,FRERE2).                                 *'), nl,
       write('    *    ?-  parents(FRERE1,FRERE2).                                 *'), nl,
       write('    *    ?-  messageFamille             to reread this.            *'), nl,
       write('    ****************************************************************'), nl, nl.
     
    :- messageFamille.

  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
    Tu peux dire que "A est le frere de B" si A et B ont le même père/mère est que A est un homme, en empêchant bien sur que A et B soient la même personne.

    Pour ce qui est du fonctionnel de Prolog, à part le prédicat maplist/2,3 qui permet d'appliquer un prédicat à chaque élélment d'une liste, je ne vois pas trop.

    Si je peux me permettre, je trouve que tu abuses un peu des cuts. Es-tu sûr qu'ils soient toujours justifiés ?
    "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
    Profil pro
    Inscrit en
    Février 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut suite
    deja je m'excuse pour l'entete mais j'avais poste sur le mauvais forum

    comme dit precedement je cherche a creer tous les liens d'une famille
    et dans mon exemple je ne sais pas si ils ont le meme pere ou la meme mere
    par contre par la logique je sais que si ils sont frere est que si Y n'est pas une femme la reciproque est vrai.

    pour les cut j'ai assaye de suivre les predictats standard donnee dans un tutoriel du site

    elimination des cas faux puis traitement du predictat

Discussions similaires

  1. [Débutante] Analyse en composantes principales
    Par cixidetroy dans le forum MATLAB
    Réponses: 3
    Dernier message: 16/06/2008, 14h33
  2. [Débutante] Analyser un code Assembleur x86 simple
    Par élodie69 dans le forum x86 16-bits
    Réponses: 3
    Dernier message: 21/05/2008, 11h54
  3. [Débutants]Analyse structure base de données simple
    Par Serge57 dans le forum Sondages et Débats
    Réponses: 41
    Dernier message: 29/10/2007, 18h54
  4. [Débutant] Analyse d'un signal
    Par najbet dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 09/07/2007, 16h31

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