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 :

Comment définir un but


Sujet :

Prolog

  1. #1
    Membre habitué
    Inscrit en
    Novembre 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 293
    Points : 125
    Points
    125
    Par défaut Comment définir un but
    bonjour,

    je suis en train de me former à prolog,
    pour l'instant j'utilise swi.
    en regardant un peu dans les faq je suis tombé sur une résolution du pb du zébre, que j'arrive à comprendre à mon niveau.
    la question que je pose est comment faire tourner le programme pour trouver où se trouve le zébre et afficher toutes les solutions que prolog a trouver pour remplir les cases manquentes des maisons.
    voilà le 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
    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
    101
    102
    103
    104
    105
    106
    107
     
    % zebre.pl
    % programme GNU prolog (gpl)
    %
    % 1)    gplc zebre.pl
    % 2)    zebre
    %
    % Résultats :
    % -----------
    % maison(jaune,norvegien,chat,eau,paul)
    % maison(bleue,danois,cheval,the,jean)
    % maison(rouge,anglais,oiseau,lait,pierre)
    % maison(blanche,suedois,chien,biere,jacques)
    % maison(verte,allemand,zebre,cafe,hans)
    %
    % programme original de :
    % -----------------------
    %% Where does the zebre live?
    %% Puzzle solution written by Claude Sammut.
    %
    % programme transposé par
    % -----------------------
    % Jean-Paul Davalan jpdvl@wanadoo.fr
    %
    % http://perso.wanadoo.fr/jean-paul.davalan/jeux/logic/zebre/
    %
    % énoncé :
    % --------
    % Dans la rue il y a cinq maisons.
    % Les couleurs des maisons sont toutes différentes.
    % Les propriétaires sont de nationalités différentes, 
    % leurs prénoms sont différents et
    % leurs boissons préférées sont différentes
    % Dans chaque propriété vit un animal différent.
    % L'Anglais vit dans la maison rouge.
    % Le Suédois a un chien.
    % L'habitant de la maison verte boit du café.
    % La maison de Jean est voisine de celle du chat.
    % Le Danois boit du thé.
    % La maison verte est à droite de la maison blanche.
    % Pierre a un oiseau.
    % Paul habite la maison jaune.
    % Le buveur de lait habite la maison du milieu.
    % Le Norvégien habite la première maison à gauche.
    % Paul est voisin du cheval.
    % Jacques boit de la bière.
    % L'Allemand se prénomme Hans.
    % Le Norvégien vit près de la maison bleue.
    % La personne qui boit de l'eau est voisine de Jean.
    % 
    % Qui a un zèbre ?
    %
    %
    %
     
    %q :- statistics(runtime,_), zebre,
    %     statistics(runtime,[_,Y]), write('time : '), write(Y), nl.
     
     
     
     
    zebre :-
    	maisons(Maisons),
    	membre(maison(rouge, anglais, _, _, _), Maisons),
            membre(maison(_,suedois, chien,_,_), Maisons),
            membre(maison(verte,_,_,cafe,_), Maisons),
            voisin_de(maison(_,_,_,_,jean), maison(_,_,chat,_,_), Maisons),
            membre(maison(_,danois,_,the,_), Maisons),
            droite_de(maison(verte,_,_,_,_), maison(blanche,_,_,_,_), Maisons),
            membre(maison(_,_,oiseau,_,pierre), Maisons),
            membre(maison(jaune, _, _, _, paul), Maisons),
            Maisons = [_, _, maison(_, _, _, lait, _), _,_],
            Maisons = [maison(_, norvegien, _, _, _)|_],
            voisin_de(maison(_,_,_,_,paul), maison(_,_,cheval,_,_), Maisons),
            membre(maison(_,_,_,biere,jacques), Maisons),
            membre(maison(_,allemand,_,_,hans), Maisons),
            voisin_de(maison(_,norvegien,_,_,_), maison(bleue,_,_,_,_), Maisons),
            voisin_de(maison(_,_,_,eau,_), maison(_,_,_,_,jean), Maisons), 
            membre(maison(_,_,zebre,_,_), Maisons),
    	print_maisons(Maisons).
     
    maisons([
    	maison(_, _, _, _, _),
    	maison(_, _, _, _, _),
    	maison(_, _, _, _, _),
    	maison(_, _, _, _, _),
    	maison(_, _, _, _, _)
    ]).
     
    droite_de(A, B, [B, A | _]).
    droite_de(A, B, [_ | Y]) :- droite_de(A, B, Y).
     
    voisin_de(A, B, [A, B | _]).
    voisin_de(A, B, [B, A | _]).
    voisin_de(A, B, [_ | Y]) :- voisin_de(A, B, Y).
     
    membre(X, [X|_]).
    membre(X, [_|Y]) :- membre(X, Y).
     
    print_maisons([A|B]) :- !,
            write(A), nl,
    	print_maisons(B).
    print_maisons([]).
     
     
     
    %:- initialization(q).
    j 'ai mis en commentaire les lignes émanant de l'exemple d'origine écrit en GNU
    et qui font planter swi.

    excuser mon innocence mais je suis vraiment débutant...

    merci pour la réponse

    Patnel

  2. #2
    Membre habitué
    Inscrit en
    Novembre 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 293
    Points : 125
    Points
    125
    Par défaut
    donc la nuit porte conseil j 'ai mes réponses .

    pour ceux qui sont interessés ,

    il ne sert à rien de mettre les la régle q: en commentaire , elle sert simplement à faire tourner le programme dés qu'on le lance.

    maintenant pour etre plus précis le but à demander est

    et donne le résultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    on peut aussi faire :
    1 ?- trace, zebre.
    pour voir comment tourne le programme , c'est trés long , mais permet de bien comprendre le fonctionnement de prolog, sur des programmes courts , c'est simpa.

    si quelqu'un connait comment faire pour rediriger le résultat sur un fichier texte , je suis preneur.

    patnel

  3. #3
    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 essayer de faire comme ça en SWI-Prolog tout au moins.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ? tell('d:/monfichier.txt').
     
    yes.
    ? macommande.
     
    yes.
    ? told.
    Les sorties standarts seront redirigées vers d:/monfichier.txt.
    "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. [Netbeans] Comment définir CardLayout en variable?
    Par yoplaboom dans le forum NetBeans
    Réponses: 1
    Dernier message: 06/07/2005, 11h42
  2. Comment comment définir une clef primaire dans une table??
    Par nek_kro_kvlt dans le forum Bases de données
    Réponses: 4
    Dernier message: 07/02/2005, 21h06
  3. Réponses: 8
    Dernier message: 20/12/2004, 15h14
  4. Comment définir la durée du Hint ?
    Par philobedo dans le forum Composants VCL
    Réponses: 3
    Dernier message: 29/04/2004, 10h48
  5. Comment définir le type matrice ?
    Par charly dans le forum Langage
    Réponses: 7
    Dernier message: 15/06/2002, 21h01

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