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 marche la récursivité pour les listes ?


Sujet :

Prolog

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 139
    Points : 76
    Points
    76
    Par défaut Comment marche la récursivité pour les listes ?
    Bonjour à vous tous,

    Je comprend pas comment marche la recursivite avec les listes.
    J'ai bien vue l'explication http://pcaboche.developpez.com/artic...s/?page=page_1
    mais ce n'est pas expliqué.

    j'espere que vous pourrez m'expliquer,

    @+ Seb

  2. #2
    Membre actif Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 225
    Points
    225
    Par défaut
    Comme tu as vu dans le tuto de pcaboche,
    une liste est représentée [PremierElement|ResteDeLaListe]
    il suffit de rappeller le prédicat (celui que tu veux appeller sur les éléments de la liste) avec ResteDeLaListe.
    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pred([A|R]):- traitment(A),pred(R).
    Pense à traîter la liste vide !

    Pas sûr pour la syntaxe, mais l'idée est là.

    a+
    Wer nicht probiert, verliert !!

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 139
    Points : 76
    Points
    76
    Par défaut
    Merci pour ton message mais par exemple pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    member(X,[X|Y]).
    member(X,[Y|Ys]):-member(X,Ys).
    si on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    member(X,[1,2,3,4,5]).
    member(5,[1,2,5,4,5]).
    member(3,[1,2,3,4,5]).
    Je ne vois pas comment on peut dérouler cela ?

  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
    Visiblement, il faut reprendre les bases du langage. C'est par là que ça se passe: http://pcaboche.developpez.com/artic.../presentation/

    Ensuite, jète un oeil à la programmation en Prolog:
    http://pcaboche.developpez.com/artic...mation_prolog/

    A ce moment là, tu seras à même de comprendre le parcours de listes.

    Bref, il suffit de suivre les articles dans l'ordre:
    http://pcaboche.developpez.com/
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  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
    Le problème il est là justement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    member(X,[X|Y]).
    member(X,[Y|Ys]):-member(X,Ys).
    Ce code est incorrect.
    Il faut ecrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    % Aucun élément n'est membre de la liste vide
    % On s'arrête, pas la peine de continuer
    member(_,[]) :- !, fail.
    % si la liste commence par l'élément cherché, on a gagné, pas la peine de continuer
    member(X, [X | _]) :- !.
    % sinon, on regarde s'il est élément du reste de la liste
    member(X,[_|Ys]):-member(X,Ys).
    "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

  6. #6
    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
    Petite précision: c'est plus une implémentation de memberchk/2 (1 solution si X appartient à la liste, 0 sinon) que de member/2 (autant de solutions que de X dans la liste).
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  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
    Tout à fait, je n'ai pas fait attention à ce distingo.
    "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. Comment fixer des règles pour les Jtext
    Par fabou3377 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 04/02/2008, 13h50
  2. Recherche des exercices pour les listes chainée
    Par dot-_-net dans le forum C
    Réponses: 1
    Dernier message: 15/12/2007, 18h14
  3. comment creer un feature pour une liste?
    Par arioule dans le forum SharePoint
    Réponses: 0
    Dernier message: 31/08/2007, 17h40
  4. Réponses: 4
    Dernier message: 08/12/2006, 11h15
  5. Réponses: 10
    Dernier message: 17/08/2006, 22h27

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