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 :

Itération sur une liste d'éléments


Sujet :

Prolog

  1. #1
    Membre confirmé Avatar de anitshka
    Inscrit en
    Mai 2004
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 624
    Points : 605
    Points
    605
    Par défaut Itération sur une liste d'éléments
    Bonjour déjà merci à l'équipe de dvp qui a enfin ouvert un sous forum pour les prologueux

    bon j'ai un liste tarabiscottée:
    [CD1, [CD2,CD3,[CD4, CD5]], [CD6,CD7]]

    et je voudrais lister les CDx pour faire joujou avec par la suite... or je n'arrive pas a me débarrasser de ces listes dans des listes...

    pour l'instant j'ai ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    regle_anne([]) :- !.
    regle_anne([T|Q]) :-
        afficher(T),
        regle_anne(Q).
    or ceci me retourne:
    $ CD1
    $ [CD2,CD3,[CD4, CD5]]
    $ [CD6,CD7]

    Comment donc géré mes listes "parasites" pour n'atteindre que mes CD ?

    d'avance

    [edit]mes CDx sont eux même des listes du type ["evalutation",[...],... ][/edit]

  2. #2
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    salut,

    je pense que quelque chose dans ce style pourait marcher.

    tu commence par tester que ton premier element est bien un CD et si c'est le cas tu l'affiche, dans le cas contraire, tu rapelle ta fonction recursivement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    cd(["evalutation",[...],... ]).
     
    regle_anne([]) :- !.
    regle_anne([T|Q]) :-
        cd(T),
        afficher(T),
        regle_anne(Q).
    regle_anne([T|Q]) :-
        \+cd(T),
        regle_anne(T),
        regle_anne(Q).
    En esperant t'avoir aide

  3. #3
    Membre confirmé Avatar de anitshka
    Inscrit en
    Mai 2004
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 624
    Points : 605
    Points
    605
    Par défaut
    ca je ne le comprend pas...

  4. #4
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par anitshka
    Bonjour déjà merci à l'équipe de dvp qui a enfin ouvert un sous forum pour les prologueux
    Salut, ça fait aussi plaisir de rencontrer une personne connue dans ce magnifiique sous-forum Prolog qui est le nôtre !

    Pour info, c'est la disponibilité de certaines ressources sur Prolog qui a permis d'attirer le Prologuiens sur DVP, rendant cette section un peu plus active, justifiant ainsi l'ouverture d'un sous-forum.


    Citation Envoyé par anitshka
    et je voudrais lister les CDx pour faire joujou avec par la suite... or je n'arrive pas a me débarrasser de ces listes dans des listes...
    Pour cela, rien de plus simple grâce au prédicat flatten/2 ! (disponible dans toutes les implémentations qui se respectent).

    Citation Envoyé par anitshka
    [edit]mes CDx sont eux même des listes du type ["evalutation",[...],... ][/edit]
    Pas bien! Tu mélanges les torchons et les serviettes (ici, les listes et le CDs). En plus ça t'empêche d'utiliser flatten !

    Pour être plus propre, il vaut mieux utiliser des tuples (sorte de structures, mais sous Prolog) et leur donner un nom (ex: 'cd'):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    L = [cd('Rammstein', 'Sehnsucht'), cd('Rammstein', 'Mutter')]
    Enfin, \+ est l'opérateur de non preuve:
    veut dire que l'on ne peut pas prouver le prédicat cd(T).

Discussions similaires

  1. etiquette ou label sur une liste deroulante
    Par camyo dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 07/11/2005, 16h09
  2. simuler un double click sur une liste dans un dbgrid
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 1
    Dernier message: 01/09/2005, 10h45
  3. Réponses: 4
    Dernier message: 16/06/2005, 15h37
  4. Selectionnet tous ou faire un clear sur une liste
    Par Canou dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/11/2004, 10h26
  5. [Débutant][jsp] évènement sur une liste
    Par phoebe dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 14/05/2004, 10h53

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