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 :

[SWI-Prolog] Interfaçage avec XPCE


Sujet :

Prolog

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 86
    Points : 46
    Points
    46
    Par défaut [SWI-Prolog] Interfaçage avec XPCE
    salut si il ya qcq un pour m'aider.
    En fait j'essaye depuis quelques jours de realiser un script en prolog avec possibilité d'interface avec XPCE sous swiProlog, mais j'y arrive pas. je voulais afficher les valeurs possibles d'un predicat dans une fenetre...
    si vous pouvez m'aider je serais reconnaissant

    et voila en gros ce que j'essaie de faire

    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
     
     
    :-use_module(library(pce)).
     
     
    p(A):-assert(pan(A)),write('la panne est :'),nl,
    panne(P),
    write(P).
     
    panne('panne1'):-pan(1).
    panne('panne2'):-pan(2).
     
     
     
    cose(C):-cause_solution(C,_).
    solve(S):-cause_solution(_,S).
     
     
    cause_solution(cause11,solution11):-panne('panne1').
    cause_solution(cause12,solution12):-panne('panne1').
    cause_solution(cause13,solution13):-panne('panne1').
    cause_solution(cause14,solution14):-panne('panne1').
     
     
    cause_solution(cause21,solution21):-panne('panne2').
    cause_solution(cause22,solution22):-panne('panne2').
    cause_solution(cause23,solution23):-panne('panne2').
    cause_solution(cause24,solution24):-panne('panne2').
     
     
     
     
     
    %----------------------
     
     
    causes:-write('les causes sont:'),nl,
    cause.
    solutions:-write('les solutions sont:'),nl,
    solution.
     
    cause :-
    % on crée la fenêtre
    new(D, window('fenetre de causes')),
    % on lui donne la bonne taille
     
    send(D, size, size(450, 300)),
    % on crée un composant texte
    %ici j'ai essayé d'introduire le prédicat à tenir en compte
    cose(C),
    new(cose(C), text(C)),
     
    % on demande à la fenêtre de l'afficher à peu près au milieu
     
    send(D, display, C, point(80, 40)),
     
    % on envoie à la fenêtre le message d'affichage.
    send(D, open).
    solution :-
    % on crée la fenêtre
    new(D, window('fenetre de solutions')),
    % on lui donne la bonne taille
     
    send(D, size, size(450, 300)),
    % on crée un composant texte
    new(A, text('les solutions sont:')),
     
    % on demande à la fenêtre de l'afficher à peu près au milieu
     
    send(D, display,A, point(80, 20)),
     
    % on envoie à la fenêtre le message d'affichage.
    send(D, open).
    et c'est cela l'erreur qu'il me sort..
    ERROR: Type error: `pce(named_reference)' expected, found `cose(cause31)'

  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 ne peux pas faire new(cose(C), text(C)).
    Ce que tu peux faire par contre c'est :

    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
    cause :-
           % on crée la fenêtre
    	new(D, window('fenetre de causes')),
           % on lui donne la bonne taille
    	send(D, size, size(450, 300)),
     
           % on crée un composant texte
           %ici j'ai essayé d'introduire le prédicat à tenir en compte
    	cose(C),
    	new(Txt, text(C)),
     
           % on demande à la fenêtre de l'afficher à peu près au milieu
     
    	send(D, display, Txt, point(80, 40)),
     
           % on envoie à la fenêtre le message d'affichage.
    	send(D, open).
    Mais celà ne résoud sans doute pas tous les problèmes !
    "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
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 86
    Points : 46
    Points
    46
    Par défaut interfaçage avec XPCE
    salut Trap D,

    j'ai essayé cette solution bien que d'autres sans resultat. Le probleme c'est que le predicat d'affichage de la fenetre 'cause' ne prend pas en consideration le predicat 'cose'. j'ai essayé entre autres de recopier tt le programme à l'interieur de predicat cause avec des reductions des regles mais cela donne tjrs des erreurs. Vous voila mon programme avec 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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    code:
     
    :-use_module(library(pce)).
     
     
    p(A):-assert(pan(A)),write('la panne est :'),nl,
    panne(P),
    write(P).
     
    panne('panne1'):-pan(1).
    panne('panne2'):-pan(2).
     
     
     
    cose(C):-cause_solution(C,_).
    solve(S):-cause_solution(_,S).
     
     
    cause_solution(cause11,solution11):-panne('panne1').
    cause_solution(cause12,solution12):-panne('panne1').
    cause_solution(cause13,solution13):-panne('panne1').
    cause_solution(cause14,solution14):-panne('panne1').
     
     
    cause_solution(cause21,solution21):-panne('panne2').
    cause_solution(cause22,solution22):-panne('panne2').
    cause_solution(cause23,solution23):-panne('panne2').
    cause_solution(cause24,solution24):-panne('panne2').
     
     
     
     
     
    %----------------------
     
     
    causes:-write('les causes sont:'),nl,
    cause.
    solutions:-write('les solutions sont:'),nl,
    solution.
     
    cause :-
    % on crée la fenêtre
    new(D, window('fenetre de causes')),
    % on lui donne la bonne taille
     
    send(D, size, size(450, 300)),
    % on crée un composant texte
    %ici j'ai essayé d'introduire le prédicat à tenir en compte
     
     
     
    		[
    p(X):-assert(pan(X)),
    pan(1),
    pan(2),
     
     
     
     
     
    cose(cause11):-pan(1),
    cose(cause12):-pan(1),
    cose(cause13):-pan(1),
    cose(cause14):-pan(1),
     
    cose(cause21):-pan(2),
    cose(cause22):-pan(2),
    cose(cause23):-pan(2),
    cose(cause24):-pan(2),
     
     
    	cose(C)	],
     
    new(Txt, text(C)),
     
    % on demande à la fenêtre de l'afficher à peu près au milieu
     
    send(D, display, Txt, point(80, 40)),
     
    % on envoie à la fenêtre le message d'affichage.
    send(D, open).
     
     
     
    solution :-
    % on crée la fenêtre
    new(D, window('fenetre de solutions')),
    % on lui donne la bonne taille
     
    send(D, size, size(450, 300)),
    % on crée un composant texte
    new(A, text('les solutions sont:')),
     
    % on demande à la fenêtre de l'afficher à peu près au milieu
     
    send(D, display,A, point(80, 20)),
     
    % on envoie à la fenêtre le message d'affichage.
    send(D, open).
    ERROR: source_sink `p(_G710):-assert(pan(_G710))' does not exist

  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
    Avant de passer à l'affichage XPCE, es-tu sûr que ton programme fonctionne bien en mode console ?
    Comment est-il sensé ce dérouler ? J'avoue n'avoir pas bien compris
    "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
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 86
    Points : 46
    Points
    46
    Par défaut interfaçage avec XPCE
    on entre une panne, qt elle est prise en compte ds la base de fait( assert(panne(X)), on demande la cause ou solution de cette panne. maintenant, on veut que les causes d'une panne donnée soient affichées ds une fenetre XPCE. et a propos du fait que mn programme fonctionne normalement en mode console, si tu ve dire par la ds la fenetre principale de swiprolog alors oui. merci une autre fois.

  6. #6
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 86
    Points : 46
    Points
    46
    Par défaut interfaçage avec XPCE
    j'ai pas eu une reponse de votre part et j'espere que c'est pas l'impasse car je sais pas si ce que je demande est faisable ou non avec XPCE. autrement je dois essayer l'interfaçage avec java et prolog....

  7. #7
    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
    Citation Envoyé par baouk2000 Voir le message
    j'ai pas eu une reponse de votre part et j'espere que c'est pas l'impasse car je sais pas si ce que je demande est faisable ou non avec XPCE. autrement je dois essayer l'interfaçage avec java et prolog....
    Il m'arrive aussi de travailler ....
    Ce que tu veux faire est possible en XPCE, mais comme je ne comprends pas bien le déroulement du programme ...
    "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

  8. #8
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 86
    Points : 46
    Points
    46
    Par défaut interfaçage avec XPCE
    bon, pour vous expliquer l'execution de mn programme ce passe d'abord par l'introduction d'une panne ds la base de faits cad que le predicat 'panne(X)' est pris en consideration par le billet de la commande assert. aprés l'execution du fichier .pl, on introduit par exemple p(1). et la panne : panne1 est affichée. on veut connaitre les causes de cette panne. on demande une question au programme en introduisant ?- cose(C).

    le programme repond en donnant les valeurs possibles de la variable C, c'est ainsi qu'il donne les causes probables de la panne : panne1. maintenant ce que je demande c'est que les valeurs de la variable C du predicat cose(C), soient affichées (ecrites) dans une fenetre de XPCE. j'espere que ainsi j'etais clair...

  9. #9
    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
    Je crois commencer à comprendre !

    Tu peux faire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    :- dynamic pan/1.
     
    p(A):-
           % indispensable, sinon tu as une accumulation de faits inutiles
    	retractall(pan(_)),
    	assert(pan(A)),
    	write('la panne est :'),nl,
    	panne(P),
    	write(P), nl,
    	cause.
    avec pour le le prédicat cause
    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
    cause :-
            % on crée la fenêtre
    	new(D, window('fenetre de causes')),
    	% on lui donne la bonne taille
    	send(D, size, size(450, 300)),
            % on crée un composant texte
    	%ici j'ai essayé d'introduire le prédicat à tenir en compte
    	cose(C),
    	new(Txt, text(C)),
     
            % on demande à la fenêtre de l'afficher à peu près au milieu
     
    	send(D, display, Txt, point(80, 40)),
     
            % on envoie à la fenêtre le message d'affichage.
    	send(D, open).
    "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

  10. #10
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 86
    Points : 46
    Points
    46
    Par défaut interfaçage avec XPCE
    Salut merci pour ce 1er resultat maintenant la fenetre s'execute et on a l'affichage seulement il y a encore un petit ennui: c'est que seulement la 1ere cause qui s'affiche, je crois qu'on doit faire une sorte de boucle, j'ai essayé avec forall/2 mais cela n'a pas abouti...


    code:
    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
     
    :- dynamic pan/1.
     
    p(A):-
           % indispensable, sinon tu as une accumulation de faits inutiles
    	retractall(pan(_)),
    	assert(pan(A)),
    	write('la panne est :'),nl,
    	panne(P),
    	write(P), nl.
     
     
    cause :-
            % on crée la fenêtre
    	new(D, window('fenetre de causes')),
    	% on lui donne la bonne taille
    	send(D, size, size(450, 300)),
            % on crée un composant texte
     
    	forall(cose(C),new(Txt, text(C))),
            % on demande à la fenêtre de l'afficher à peu près au milieu
     
    	send(D, display, Txt,point(100,50)),
     
            % on envoie à la fenêtre le message d'affichage.
    	send(D, open).
     
     
    panne('panne1'):-pan(1).
    panne('panne2'):-pan(2).
     
     
    cose(C):-cause_solution(C,_).
    solve(S):-cause_solution(_,S).
     
     
    cause_solution(cause11,solution11):-panne('panne1').
    cause_solution(cause12,solution12):-panne('panne1').
    cause_solution(cause13,solution13):-panne('panne1').
    cause_solution(cause14,solution14):-panne('panne1').
     
     
    cause_solution(cause21,solution21):-panne('panne2').
    cause_solution(cause22,solution22):-panne('panne2').
    cause_solution(cause23,solution23):-panne('panne2').
    cause_solution(cause24,solution24):-panne('panne2').

  11. #11
    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
    Pour afficher toutes les causes possibles, tu peux faire ainsi :
    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
    cause :-
            % on crée la fenêtre
    	new(D, window('fenetre de causes')),
    	% on lui donne la bonne taille
    	send(D, size, size(450, 300)),
            % on crée un composant texte
    	%ici j'ai essayé d'introduire le prédicat à tenir en compte
    	new(Txt1, text('')),
    	assert(str(Txt1)),
    	forall(cose(C), (retract(str(T)),
    			 send_list(T, append, ['\n', C]),
    			 assert(str(T)))),
     
    	retract(str(T3)),
            % on demande à la fenêtre de l'afficher à peu près au milieu
     
    	send(D, display, T3, point(80, 40)),
     
            % on envoie à la fenêtre le message d'affichage.
    	send(D, open).
    "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

  12. #12
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 86
    Points : 46
    Points
    46
    Par défaut interfaçage avec XPCE
    le probleme est resolu merci pour votre aide precieux...

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

Discussions similaires

  1. [Python 2.X] Problème avec interfaçage DJANGO et SWI-PROLOG
    Par Triton972 dans le forum Django
    Réponses: 10
    Dernier message: 23/01/2015, 10h11
  2. Réponses: 5
    Dernier message: 14/05/2008, 18h14
  3. Réponses: 2
    Dernier message: 23/03/2008, 09h46
  4. Réponses: 1
    Dernier message: 12/02/2008, 09h10
  5. [Swi-Prolog][Xpce] Alignement négatif
    Par je®ome dans le forum Prolog
    Réponses: 4
    Dernier message: 12/03/2007, 13h37

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