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 :

Programme qui doit interroger l'utilisateur pour deviner un animal


Sujet :

Prolog

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Programme qui doit interroger l'utilisateur pour deviner un animal
    Le but de mon « système expert » est de faire deviner au programme l’animal auquel pense l'utilisateur, en le questionnant.

    Voici mon code ainsi que l’exemple d’exécution.

    Je n’arrive pas à trouver les erreurs.

    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
    
    :-dynamic(known/3).
    
    liste_animaux([tigre,guepard,girafe,zebre,autruche,pingouin,aigle]).
    
    animal(X):-liste_animaux(L),member(P,L),T=..[P,X],T,write('je pense que '),write(' est un '),write(P).
    
    /*
    1.	SI (animal a poils) ALORS (animal est mammifère)
    2.	SI (animal donne lait) ALORS (animal est mammifère)
    3.	SI (animal mange viande) ALORS (animal est carnivore)
    4.	SI (animal a dents pointus) ET (animal a griffes) ET (animal a yeux vers avant) ALORS (animal est carnivore)
    5.	SI (animal est mammifère) ET (animal a sabots) ALORS (animal est ongulé)
    6.	SI (animal est mammifère) ET (animal n'est pas carnivore) ALORS (animal est ongulé)
    7.	SI (animal est mammifère) ET (animal est carnivore) ET (animal est couleur brune) ET (animal a tâches sombres) ALORS (animal est guépard)
    8.	SI (animal est mammifère) ET (animal est carnivore) ET (animal est couleur brune) ET (animal a raies noires) ALORS (animal est tigre)
    9.	SI (animal est ongulé) ET (animal a long cou) ET (animal a longues pattes) ET (animal a tâches sombres) ALORS (animal est girafe)
    10.	SI (animal est ongulé) ET (animal a raies noires) ALORS (animal est zèbre)
    11.	SI (animal a plumes) ALORS (animal est oiseau)
    12.	SI (animal vole) ET (animal pond œufs) ALORS (animal est oiseau)
    13.	SI (animal est oiseau) ET (animal ne vole pas) ET (animal a long cou) ET (animal a longues pattes) ET (animal est noir et blanc) ALORS (animal est autruche)
    14.	SI (animal est oiseau) ET (animal ne vole pas) ET (animal nage) ET (animal est noir et blanc) ALORS (animal est pingouin)
    15.	SI (animal est oiseau) ET (animal est carnivore) ALORS (animal est aigle)
    */
    
    %1.
    est_un(X,mammifere) :- corps_couvert_de(X,poils).
    %2.
    est_un(X,mammifere) :- nourriture_petit(X,lait).
    %3.
    est_un(X,carnivore) :- nourriture(X,viande).
    %4.
    est_un(X,carnivore) :- forme_des_dents(X,pointue),extremites_des_pattes(X,griffes),direction_des_yeux(X,en_avant).
    %5.
    est_un(X,ongule) :- est_un(X,mammifere), extremites_des_pattes(X,sabots).
    %6.
    est_un(X,ongule) :- est_un(X,mammifere),not(est_un(X,carnivore)).
    %7.
    guepard(X) :- est_un(X,mammifere),est_un(X,carnivore),couleur(X,brune),robe_avec(X,taches_sombres).
    %8.
    tigre(X) :- est_un(X,mammifere),est_un(X,carnivore),couleur(X,brune),robe_avec(X,raies_noires).
    %9.
    girafe(X) :- est_un(X,ongule),nature_du_cou(X,long),nature_des_pattes(X,longues),robe_avec(X,taches_sombres).
    %10.
    zebre(X) :- est_un(X,ongule),robe_avec(X,raies_noires).
    %11.
    ligne 47 est_un(X,oiseau) :- corps_couvert_de(X,plumes).
    %12.
    est_un(X,oiseau) :- locomotion(X,vole),reproduction(X,pond_des_oeufs).
    %13.
    autruche(X) :- est_un(X,oiseau),not(locomotion(X,vole)),nature_du_cou(X,long),nature_des_pattes(X,longues),couleur(X,noir_et_blanc).
    %14.
    pingouin(X) :- est_un(X,oiseau),not(locomotion(X,vole)),locomotion(X,nage),couleur(X,noir_et_blanc).
    %15.
    aigle(X) :- est_un(X,oiseau),est_un(X,carnivore).
    
    	
    ligne 58est_un(X,Y) :- ask(est_un,X,Y).
    corps_couvert_de(X,Y) :- ask(corps_couvert_de,X,Y).
    nourriture_petit(X,Y) :- ask(nourriture_petit,X,Y).
    forme_des_dents(X,Y) :- ask(forme_des_dents,X,Y).
    extremites_des_pattes(X,Y) :- ask(extremites_des_pattes,X,Y).
    direction_des_yeux(X,Y) :- ask(direction_des_yeux,X,Y).
    couleur(X,brune,Y) :- ask(couleur,X,Y).
    robe_avec(X,Y):- ask(robe_avec,X,Y).
    nature_du_cou(X,Y) :- ask(nature_du_cou,X,Y).
    nature_des_pattes(X,Y) :- ask(nature_des_pattes,X,Y).
    locomotion(X,Y) :- ask(locomotion,X,Y).
    reproduction(X,Y) :- ask(reproduction,X,Y).
    
    ask(U,X,Y):-known(U,X,Y).
    
    ask(est_un,X,Y) :- not(known(est_un,X,Y)),write('animal est un '), writeln(' mammifere/carnivore/ongule/oiseau/'), read(Y),assert(known(est_un,X,Y)).
    ask(corps_couvert_de,X,Y) :- not(known(corps_couvert_de,X,Y)),write('son corp est couvert de '), writeln(' plumes/poils'), read(Y),assert(known(corps_couvert_de,X,Y)).
    ask(nourriture_petit,X,Y) :- not(known(nourriture_petit,X,Y)),write('la nourriture du petit est '), writeln(' lait'), read(Y),assert(known(nourriture_petit,X,Y)).
    ask(forme_des_dents,X,Y) :- not(known(forme_des_dents,X,Y)),write('la forme de ses dents est '), writeln(' pointue'), read(Y),assert(known(forme_des_dents,X,Y)).
    ask(extremites_des_pattes,X,Y) :- not(known(extremites_des_pattes,X,Y)),write('extremité de ses pattes '), writeln(' sabots/griffes'), read(Y),assert(known(extremites_des_pattes,X,Y)).
    ask(direction_des_yeux,X,Y) :- not(known(direction_des_yeux,X,Y)),write('animal a les yeux  '), writeln(' en_avant'), read(Y),assert(known(direction_des_yeux,X,Y)).
    ask(couleur,X,Y) :- not(known(couleur,X,Y)),write('animal est de couleur '), writeln(' brune/noir_et_blanc'), read(Y),assert(known(couleur,X,Y)).
    ask(robe_avec,X,Y) :- not(known(robe_avec,X,Y)),write('animal a une robe avec '), writeln(' raies_noires/taches_sombres'), read(Y),assert(known(robe_avec,X,Y)).
    ask(nature_du_cou,X,Y) :- not(known(nature_du_cou,X,Y)),write('animal a un cou '), writeln(' long'), read(Y),assert(known(nature_du_cou,X,Y)).
    ask(nature_des_pattes,X,Y) :- not(known(nature_des_pattes,X,Y)),write('animal a des pattes '), writeln(' longues'), read(Y),assert(known(nature_des_pattes,X,Y)).
    ask(locomotion,X,Y) :- not(known(locomotion,X,Y)),write('animal '), writeln(' vole/nage'), read(Y),assert(known(locomotion,X,Y)).
    ask(reproduction,X,Y) :- not(known(reproduction,X,Y)),write('animal '), writeln(' pond_des_oeufs'), read(Y),assert(known(reproduction,X,Y)).

    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
     
    Warning: (c:/.../programmeanimal3.pl:47):
            Clauses of est_un/2 are not together in the source-file
    Warning: (c:/.../programmeanimal3.pl:58):
            Clauses of est_un/2 are not together in the source-file
    % c:/.../programmeAnimal3.pl compiled 0.00 sec, 10,880 bytes
    Welcome to SWI-Prolog (Multi-threaded, Version 5.6.40)
    Copyright (c) 1990-2007 University of Amsterdam.
    SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
    and you are welcome to redistribute it under certain conditions.
    Please visit http://www.swi-prolog.org for details.
     
    For help, use ?- help(Topic). or ?- apropos(Word).
     
    1 ?- animal(x).
    son corp est couvert de  plumes/poils
    |: plumes.
    la nourriture du petit est  lait
    |: lait.
    ERROR: est_un/2: Undefined procedure: nourriture/2
       Exception: (9) est_un(x, carnivore) ? 
    Action (h for help) ?

  2. #2
    Membre actif Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 225
    Points
    225
    Par défaut
    Comme te l'indique l'interprêteur, le prédicat nourriture/2 n'est pas déclaré.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    %3.
    est_un(X,carnivore) :- nourriture(X,viande).
    Serait-ce pas plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    est_un(X,carnivore) :- nourriture_petit(X,viande).
    [/CODE]

    Bonne continuation
    Wer nicht probiert, verliert !!

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Ok merci.

    Maintenant, prolog revient toujours sur les mêmes questions, et a du mal à conclure. Je ne sais pas trop quoi faire pour améliorer ce programme.

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    et concernant les Warning. Que veulent-ils dire ?

  5. #5
    Membre actif Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 225
    Points
    225
    Par défaut
    Re,

    pour les warnings, il suffit de lire ce qu'il est écrit.
    Clauses of est_un/2 are not together in the source-file
    Les clauses(prédicats) ne sont pas ensemble dans ton code source.
    En ligne 47 et 54, tu ajoutes 2 fois la clause est_un/2
    Remontes les près des autres déclarations de est_un/2

    a+
    Wer nicht probiert, verliert !!

Discussions similaires

  1. Conseil sur une PS qui doit interroger X bases
    Par Raphael1980 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/07/2011, 14h07
  2. Réponses: 3
    Dernier message: 09/11/2009, 12h42
  3. Enlever la gestion de debug pour les programmes qui plantent
    Par kev42100 dans le forum Visual C++
    Réponses: 3
    Dernier message: 11/10/2007, 21h49
  4. Réponses: 11
    Dernier message: 30/10/2006, 16h59
  5. Réponses: 2
    Dernier message: 07/06/2006, 11h44

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