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 :

Imprimer une liste de listes


Sujet :

Prolog

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 134
    Points : 69
    Points
    69
    Par défaut Imprimer une liste de listes
    Bonjour,

    J'ai un petit problème,
    Aprés avoir effectuer bien comme il faut son travail, j'aimerais que swiprolog m'affiche le resultat

    qui est sous la forme d'une liste dont les élément sont aussi des listes.

    prenons un exemple simple :
    Une liste de nom :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [[Dupond], [Quiroule], [Suifou], [Ingstown], [Gator]]
    a la base je travaille avec des chaines de caractères (c'est à dire que dans mon source, dans la base de donnée c'est écrit comme ça :

    personne(1, 'Dupond', ...).
    personne(2, 'Drant', ...).
    personne(3, 'Quiroule', ...).
    personne(4, 'Gouache', ...).
    etc

    mais une fois que je veux afficher la réponse avec une simple fonction récursive, swiprolog n'utilise plus les guillemets, Ce qui est trés génant, car du coup mes noms propres deviennent des variables et ma fonction d'affichage boucle...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    % Ecrit la reponse (liste de liste)
    affiche_reponses([]).
    affiche_reponses([Reponse|Liste_reponse]):- affiche_rep(Reponse), nl, affiche_reponses(Liste_reponse).
    affiche_rep([]).
    affiche_rep([M|L]):-
    	write('   '),write(M),
    	affiche_rep(L).
    Exemple a la main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ?- affiche_reponses([['Dupond',1984,3], ['Quiroule',caen, 1469], ['Suifou'], ['Ingstown'], ['Gator']]).
       Dupond   1984   3
       Quiroule  caen   1469
       Suifou
       Ingstown
       Gator
     
    Yes


    Alors que swiprolog lui me fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [trace]  ?- affiche_reponses([[Dupond], [Quiroule], [Suifou], [Ingstown], [Gator]]).
       Call: (7) affiche_reponses([[_G312], [_G318], [_G324], [_G330], [_G336]]) ? creep
       Call: (8) affiche_rep([_G312]) ? Unknown option (h for help)
    ...

    Donc voilà mes questions :
    - comment forcer l'affichage de mes noms propres ?
    - y-t-il moyen d'ecrire des tabulations ? (j'ai essayer des "\t", mais il m'ecrit des [9] à la place

    merci

  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
    Chez moi les affichages se font sans aucun problème :
    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
    personne(1, 'Dupond','Michel').
    personne(2, 'Drant', 'Jean').
    personne(3, 'Quiroule', 'Pierre').
    personne(4, 'Gouache', 'Lucie').
     
     
    affiche_reponses([]).
    affiche_reponses([Reponse|Liste_reponse]):- 
    	affiche_rep(Reponse), nl, affiche_reponses(Liste_reponse).
    affiche_rep([]).
    affiche_rep([M|L]):-
    	write('   '),write(M),
    	affiche_rep(L).
     
    test :-
    	forall(personne(X,Y,Z),
    	       (   affiche_rep([X,Y,Z]), nl)),
            nl,
    	forall(personne(X,Y,Z),
    	         format("~a~+~a~+~a~n", [X,Y,Z])),
    	nl,
    	forall(personne(X,Y,Z),
    	         format("~a~20|~a~40|~a~n", [X,Y,Z])).
    J' ai ajouté 2 méthodes pour le formatages des affichages.
    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
     
       1   Dupond   Dupont
       2   Drant   Jean
       3   Quiroule   Pierre
       4   Gouache   Aquarelle
     
    1       Dupond  Dupont
    2       Drant   Jean
    3       QuiroulePierre
    4       Gouache Aquarelle
     
    1                   Dupond              Dupont
    2                   Drant               Jean
    3                   Quiroule            Pierre
    4                   Gouache             Aquarelle
    "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

Discussions similaires

  1. Imprimer une zone de liste
    Par nuxeur dans le forum VBA Access
    Réponses: 3
    Dernier message: 02/06/2008, 22h59
  2. Regrouper une liste en liste de listes
    Par West01 dans le forum Prolog
    Réponses: 12
    Dernier message: 14/03/2008, 14h07
  3. [Access] Imprimer une "zone de liste"
    Par le_sonic dans le forum Access
    Réponses: 3
    Dernier message: 06/09/2006, 16h44
  4. imprimer une facture avec liste de produits variables
    Par ouldfella dans le forum Delphi
    Réponses: 4
    Dernier message: 30/07/2006, 23h10
  5. Comment imprimer une zone de liste?
    Par Dnx dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 12/01/2006, 13h24

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