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 accéder aux premiers éléments d'une liste


Sujet :

Prolog

  1. #1
    Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Mai 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Liban

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Comment accéder aux premiers éléments d'une liste
    SVP je suis débutante en prolog qui peut m'aider pour écrire ce prédicat : c Urgent SVP


    Définir un prédicat debut/3, tel que debut(L1,N,L2) est vrai si L2 contient les N premiers éléments de L1.

  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 dois avoir eu un cours de Prolog tout de même.
    Comment est définie une liste en Prolog ?

  3. #3
    Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Mai 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Liban

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 4
    Points : 2
    Points
    2
    Par défaut oui je sais comment déinir une liste en prolog
    mais je suis très en retard c pour ça que je demander l'aide :

    j'ai écrit ce prédicat en prolog :

    debut(L,X) :-append(X,[_], L),!.
    debut(L,Y) :-append([_],T,L),debut(T,Y).

    mai il ne donne pas ce que je voulu
    si quelqu’un peut m'aider ça sera gentil

  4. #4
    Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Mai 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Liban

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 4
    Points : 2
    Points
    2
    Par défaut oui je sais comment déinir une liste en prolog
    Citation Envoyé par Trap D Voir le message
    Tu dois avoir eu un cours de Prolog tout de même.
    Comment est définie une liste en Prolog ?
    mais je suis très en retard c pour ça que je demander l'aide :

    j'ai écrit ce prédicat en prolog :

    debut(L,X) :-append(X,[_], L),!.
    debut(L,Y) :-append([_],T,L),debut(T,Y).

    mai il ne donne pas ce que je voulu
    si quelqu’un peut m'aider ça sera gentil

  5. #5
    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 lph90 Voir le message
    mais je suis très en retard c pour ça que je demander l'aide :
    Très mauvaise excuse !!
    Dans le cours, il y a du avoir une explication sur le parcours des listes non ?
    Eh bien il faut compter le nombre de fois qu'on progresse dans la liste, à chaque on décrémente ou incrémente un compteur et quand on est arrivé à la bonne valeur (0 ou N) alors on identifie la valeur courante d'un accumulateur avec le résultat final attendu !
    Il existe une autre méthode un peu plus compliquée.

  6. #6
    Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Mai 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Liban

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Trap D Voir le message
    Très mauvaise excuse !!
    Dans le cours, il y a du avoir une explication sur le parcours des listes non ?
    Eh bien il faut compter le nombre de fois qu'on progresse dans la liste, à chaque on décrémente ou incrémente un compteur et quand on est arrivé à la bonne valeur (0 ou N) alors on identifie la valeur courante d'un accumulateur avec le résultat final attendu !
    Il existe une autre méthode un peu plus compliquée.

    j'essai depuis hier et j'ai rien trouver svp cette fois seulement

  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
    Bon alors c'est mon jour de bonte !
    La définition d'une liste en Prolog est celle-ci
    L = [T | Q], ou T est le premier élément de la liste, et Q le reste de la liste, Q donc une liste (de la forme [A | B]) ou la liste vide (donc []).
    A partir de cela, si on écrit [T|Q] on a accès au premier élément de la liste.
    On veut les N premiers éléments de la liste, on introduit un compteur dans notre prédicat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    % [T|Q] est la liste dont on veut les N premiers éléments
    % R est le résultat
    n_premiers([T|Q], N, R) :-
      % on va aller chercher les N-1 premiers éléments de Q
      % il faut que N soit plus grand que 0
      N > 0,
      N1 is N-1,
      % on les aura avec le même predicat (appel récursif)
      n_premiers(Q, N1, R1),
      % maintenant on construit la liste résultat R
      % en mettant en T devant R1
      R = [T|R1].
    Maintenant, quand doit-on s'arréter ? Lorsque N est égal à 0.
    Si on veut 0 élément, quelque soit la liste fournie, on obtient une liste vide
    Donc le prédicat d'arrêt est

    Je ne donne que cette méthode, c'est la plus intéressante à mon avis.

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/12/2009, 15h18
  2. afficher le premier élément d'une liste
    Par sandrine49 dans le forum Struts 1
    Réponses: 3
    Dernier message: 25/05/2009, 16h33
  3. comment accéder aux objets éléments d'une cbo?
    Par Philippe PONS dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/05/2009, 16h19
  4. Réponses: 5
    Dernier message: 11/09/2007, 11h32
  5. Réponses: 2
    Dernier message: 11/01/2005, 14h10

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