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 :

aide pour débutant


Sujet :

Prolog

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 5
    Points : 3
    Points
    3
    Par défaut aide pour débutant
    Bonjour à tous,
    je suis un bleu en prolog gprolog dans l'environnement fedora 11). J'ai des règles (regle.pro) que j'aimerai tester sur les données (test.txt).
    Voici le contenu du fichier regle.pro
    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
    f:-y, NOT(x).
     
    f:-x, not(y).
     
     
     
    x:-a, b, c.
     
    x:-b, not(c), d.
     
    x:-not(a), not(b), d.
     
     
     
    y:-a, c, d.
     
    y:-a, b, d.
    et voici le contenu de test.pro

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    a=0, b=1, c=1, d=1.
     
     
    a=1, b=1, c=1 d=0.
     
     
    a=1, b=1, c=0, d=1.
     
    0== false et 1== true.
    et lorsque je charge avec consult j'obtiens des erreurs suivantes:

    | ?- consult(regle.pro).
    uncaught exception: error(syntax_error('user_input:4 (char:14) , or ) expected'),read_term/3)
    | ?- consult(test.pro).
    uncaught exception: error(syntax_error('user_input:5 (char:13) , or ) expected'),read_term/3)
    Pouvez vous y jeter un coup d'oeil et me dire comment procèder?

    Merci d'avance

  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
    Bonjour

    Je ne vois pas trop ce que tu essaies de faire. Peux-tu l'expliquer ?

    Il faut que tu saches qu'en Prolog, toutes les variables commencent par des majuscules, et donc, pour Prolog, NOT écrit de cette façon est une variable qui porte le nom NOT.
    Par contre a, b, c sont des constantes qui ne peuvent avoir de valeur sinon qu'elle même (e.g. a = a), mais tu n'auras jamais en Prolog a = 1 !
    a peut-être aussi le nom d'un prédicat n'ayant pas d'argument (on dit d'arité 0).

    Par exemple, lorsque tu écris
    x:-a, b, c.
    cela signifie que x est vrai uniquement lorsque a, b et c le sont aussi, a, b et c étant alors des faits ou des règles sans arguments.
    On peut aussi écrire
    alors A, B, C sont des variables qui doivent être unifiées au moment de l'appel de x.
    "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
    Juillet 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci pour ce début de réponse.

    En fait, j'ai des variables booléennes dont les unes dépendent des autres (sans cycle). Parmi ces variables, nous pouvons distinguer des conclusions finales, des conclusions intermédiaires (qui sont aussi prémisses) et des entrées. Dans le cas présent, f est une concluision finale, x et y sont des conclusions intermédiaires et a,b,c,d sont des entrées. j'aimerais écrit un programme prolog qui me permettra de de connaître la valeur de f pour les différentes combinaisons de a,b,c et d que je lui passerai.
    Par exemple, je pourrai dire A=true, B=true, C=true et D=false; et demander quelle est la valeur de f.
    Comment alors faire un fichier de règles et un fichier pour mes exemples de test?

    Merci d'avance

  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
    Ok. Voici une possibilité pour faire ça :
    fichier regle.pro
    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
    % regles d'inférences
    f(A, B, C, D):-
    	y(A, B, C, D),
    	not(x(A, B, C, D)).
     
    f(A, B, C, D):-
    	x(A, B, C, D),
    	not(y(A, B, C, D)).
     
     
     
    x(A, B, C, _D):-
    	A, B, C.
     
    x(_A, B, C, D):-
    	B, not(C), D.
     
    x(A, B, _C, D):-
    	not(A), not(B), D.
     
     
     
    y(A, _B, C, D):-
    	A, C, D.
     
    y(A, B, _C, D):-
    	A, B, D.
     
    not(X) :-
    	\+X.
    Fichier test.pro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    % le fichier test
    test1 :-
    	f(fail, true, true, true).
     
    test2 :-
    	f(true, true, true, fail).
     
    test3 :-
    	f(true, true, fail, true).
    "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
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci, je commence à comprendre ce que je dois faire.
    Mais je n'arrive pas à comprendre pourquoi vous écrivez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    f(A, B, C, D):-
        y(A, B, C, D),
        not(x(A, B, C, D)).
     
    f(A, B, C, D):-
        x(A, B, C, D),
        not(y(A, B, C, D)).
    alors que pour moi f dépend de X et de Y.
    Est il possible d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    f(X,Y):-X,not(Y).
    X(A,B,C,D):-A,B,C,not(D).
    Y(A,B,C,D):-not(A),B,C,not(D).
    Pouvez vous me conseiller un support de cours où je peux trouver des exemples sur le traitement de la logique des prédicats simples en Prolog?

    Merci une fois de plus!

  6. #6
    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
    Il faut faire attention à la différence entre l'initiale majuscule et minuscule en Prolog. (voir mon premier post).

    f(X,Y):-X,not(Y).
    X(A,B,C,D):-A,B,C,not(D).
    Y(A,B,C,D):-not(A),B,C,not(D).
    f dépend effectivement de x et de y et x et y dépendent eux de A B C et D, donc au bout de la chaine f dépend de A, B, C et D.

    dans f(X,Y):-X,not(Y). X et Y sont des variables qui peuvent être unifiées avec n'importe quoi.

    L'écriture X(A,B,C,D) :- A,B,C, not(D). est incorrecte en Prolog. X est ce qu'on appelle un foncteur et doit être écrit en minuscule. On écrit x(A,B,C,D). La différence de signification de x et X apparaît évidente.
    "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
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Bonjour,
    j'ai pris exactement la proposition de votre premier post mais là j'ai des erreurs
    Voici le contenu du fichier en question:
    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
    f(A, B, C, D):-
    	y(A, B, C, D),
    	not(x(A, B, C, D)).
     
    f(A, B, C, D):-
    	x(A, B, C, D),
    	not(y(A, B, C, D)).
     
     
     
    x(A, B, C, _D):-
    	A, B, C.
     
    x(_A, B, C, D):-
    	B, not(C), D.
     
    x(A, B, _C, D):-
    	not(A), not(B), D.
     
     
     
    y(A, _B, C, D):-
    	A, C, D.
     
    y(A, B, _C, D):-
    	A, B, D.
     
    not(X) :-
    	\+X.
    | ?- consult(essai3.pro).
    uncaught exception: error(syntax_error('user_input:4 (char:15) , or ) expected'),read_term/3)
    Et le deuxième fichier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    test1 :-
    	f(fail, true, true, true).
     
    test2 :-
    	f(true, true, true, fail).
     
    test3 :-
    	f(true, true, fail, true).
    De même, lorsque je charge le fichier des faits, j'ai également cette erreur.
    Je ne comprend pas ce que veut dire cette erreur. Je travaille avec gprolog sur fedora 11. Ces règles sont obtenues d'un autre système (arbres de décision) et je vais les évaluer sur des exemples.
    Merci d'avance

  8. #8
    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
    Tout d'abord pense aux balises code (bouton # en haut à droite de l'éditeur). Il permet d'afficher le code correctement avec les indentations. Tu sélectionne le texte et tu cliques sur le bouton.
    Pour ce qui est du reste, je ne comprends pas trop, la seule différence avec toi est que j'utilise gProlog sous Windows 7 !

    [EDIT]Au fait, c'est consult('regle.pro'). le nom du fichier est entre quote '. Ce doit être ça ton erreur.
    [/EDIT]
    "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

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Bonjour,
    Je crois que vous m'avez ouvert les yeux sur la façon de procèder; je vais d'abord extraire mes règles. Ensuite, je vais écrire mes exemples (faits) de test sour la forme de mon fichier 'test.pro'.
    Je vais revenir sur Prolog quand j'aurais extrait ces règles. Merci pour tout.
    Effectivement, c'est le problème de quote ma empécher d'exécuter avec consult(). Donc là, Dans le code d'extraction de règles, je mettrai directement les règles sous ce format.

    Merci pour tout

  10. #10
    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
    Un petit clic sur alors ?
    "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

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

Discussions similaires

  1. [Wamp] Aide pour débutant
    Par mohamed2006 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 9
    Dernier message: 24/01/2008, 19h15
  2. Petite aide pour débutant
    Par akrogames dans le forum Zend Framework
    Réponses: 4
    Dernier message: 23/01/2008, 15h49
  3. Aide pour débutant: sgbdr
    Par mithrendil dans le forum ASP.NET
    Réponses: 13
    Dernier message: 09/07/2007, 12h07
  4. aide pour débutant en reseaux
    Par Coolio dans le forum Développement
    Réponses: 1
    Dernier message: 18/12/2005, 00h40
  5. Aide pour débutant : addition
    Par playentry dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/03/2005, 19h08

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