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 :

Liste comportant N fois l'élèment X


Sujet :

Prolog

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 148
    Points : 62
    Points
    62
    Par défaut Liste comportant N fois l'élèment X
    Bonjour à tous,

    Alors voilà mon problème, je dois créer un prédicat liste_elt(X,N,L) qui renvoie une liste L contenant N fois les éléments X
    ex: liste_elt(5,2,L). ===> [5,5]

    voilà ce que j'ai fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    liste_elt(X,1,[X]).   //premier cas si N = 1 je renvoie une liste avec un seul élément X
    liste_elt(X,N,L3):-liste_elt(X,N,[X|L3]). //c'est où je bloque, je vois pas trop ce qu'il faut faire

    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
    Il a deux méthodes pour faire ce genre de choses, l'une avec accumulateur, l'autre plus directe, en utilisant le "retour de récursion".

    La première avec accumulteur utilise en général 2 regles, l'une "générale" et l'autre lorsque le travail est fini.

    Dans le cas qui nous occupe on aura un prédicat avec 4 arguments :
    liste_elt(X,V,Acc, Res) ==>
    X est l 'élément X a répéter dans la liste
    N est la valeur courante du compteur d'ajouts de X dans l'accumulateur
    Acc est la valeur courante de l'accumulateur
    Res est le résultat final.
    Le travail est ternminé quand le compteur est à zéro, on unifie l'accumulateur et le resultat final.
    La deuxième regles est le cas général, donc que fait-on, on ajoute la valeur X en tete de l'accumulateur, on decrémente le compteur, et on appelle la règle avec les nouvelles valeurs du compteur et de l'accumulateur.
    Evidemment, à l'appel de la regle, l'accumulateur est ici.
    L'intérêt de cette méthode est qu'elle est terminale récursive.

    La méthode avec le retour de récursion est un peu plus difficile à appréhender et n'est pas terminale récursive.
    Le raisonnement consiste à dire qu'à la valeur N du compteur, et bien je n'ai qu'à compléter la liste résultat obtenue pour la valeur N-1.
    On lance donc la récursion en premier.
    Evidemment, pour la valeur du compteur 0, la liste résultat est vide.

    Bon courage.
    "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

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 148
    Points : 62
    Points
    62
    Par défaut
    C'est bon j'ai réussi à le faire..Merci

  4. #4
    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
    Alors un petit click sur
    "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. Supprimer plusieur fois un élément dans une liste
    Par Dr_Blurp dans le forum Général Python
    Réponses: 5
    Dernier message: 15/06/2014, 17h13
  2. [Débutant] Afficher une seule fois les éléments d'un liste triée
    Par cry57 dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 16/03/2011, 16h10
  3. Réponses: 5
    Dernier message: 19/09/2007, 11h22
  4. liens dans une liste: comportement etrange
    Par lapin_hobbit dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 08/06/2007, 13h14
  5. Réponses: 20
    Dernier message: 08/06/2006, 10h12

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