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 :

[Prolog] Comptage de liste


Sujet :

Prolog

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de kululu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2009
    Messages : 120
    Par défaut [Prolog] Comptage de liste
    Kikoo

    J'ai un soucis en prolog : je suis un débutant et je voudrais en faite que prolog me donne la taille d'une liste
    Ex : taille([a,b,c],Res)
    Res doit me renvoyer 3

    Jai ça mais ça marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    taille([],_).
    taille([_|X],Res) :-  Res2 is Res+1 , taille(X,Res2) .
    Donc j'ai X qui est ma liste et Res le resultat
    Prolog prend le 1er charactere de la liste par recursion et je fais intervenir une variable Res2 qui est en faite l'incrementation de Res (j'ai essayer de mettre l'incrementation apres le taille(X,Res2) mais ça marche pas non plus)

    ps: je connais l'existance de length/2 mais je veux le recoder

    et si c'est pas trop vous demander j'ai une question subsidiaire :
    je voudrais creer permutation/2 en gros permutation([a,b,c],L) affiche les 6 solutions possibles (abc, acb, bac, etc )

    Merci à vous

  2. #2
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2005
    Messages : 263
    Par défaut
    Bonjour,

    Connais-tu le concept d'arbre de recherche lié à prolog? Si oui, je te conseille de le dessiner pour un cas simple, tu devrais vite trouver ton erreur.
    Sinon, je peux tenter d'expliquer ce qu'est un arbre de recherche (mais c'est pas très compliqué).

    Une autre chose à laquelle tu dois faire attention en prolog, ce sont les modes d'appels de ton prédicat, c'est-à-dire lorsque tu appelles ton prédicat, quelles variables sont instanciées, et lesquelles ne le sont pas. C'est très important car certaines opérations nécessite qu'une ou plusieurs variables soient instanciées. Dans ton cas, je fais référence au prédicat "is". Si l'expression à évaluer n'est pas complètement instanciée alors tu auras une erreur. Il existe des méthodes pour qu'une telle erreur ne se produise pas, mais pour cela il faut jouer avec la programmation par contrainte et je suppose que ce n'est pas ce sujet que tu dois apprendre pour l'instant ;-)

    Une dernière chose qui est très utile, c'est d'écrire une spécification de son prédicat. Cela permet d'expliciter ses idées et d'être clair avec soi-même. La spécification d'un prédicat, c'est un peu la documentation à écrire dans d'autres langage (la javadoc pour le java par exemple). Tu peux spécifier comme tu le sens tant que ce soit clair.
    Personnellement, je spécifie de la manière suivante: supposons que je veuilles spécifier un prédicat "mon_predicat". Je donne le mode de chaque variable (+ pour une variable instanciée, - pour une variable non-instanciée, ? si cela dépend auquel cas il faut expliquer) et ensuite, pour chaque variable, expliquer ce qu'elle représente.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    %le prédicat mon_predicat(+Variable_instanciée, ..., -Variable_non_instanciée, ...) est vrai si
    %Variable_instanciée est ....
    %....
    %Variable_non_instanciée est ...
    %...
    Voila de quoi t'aider pour la rédaction de ce premier prédicat. Pour permutation, on verra après

  3. #3
    Membre confirmé Avatar de kululu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2009
    Messages : 120
    Par défaut
    J'ai pas tout compris

    Les arbres ok (mon arbre correspond à ce que j'ai programmé)

    Mais après j'ai pas compris v_v

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2005
    Messages : 263
    Par défaut
    Sans même le voir, je peux te dire que soit ton arbre est faux, soit tu n'as pas utilisé le code que tu nous a montré. Si tu nous le montre, on pourra t'indiquer où chercher pour voir tes fautes ;-)

    Regardes bien le cas de base que tu nous as montré. Et poses-toi la question de savoir s'il exprime bien ce que tu veux qu'il fasse.

    Que n'as-tu pas compris dans mes conseils précédents?

  5. #5
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Par défaut
    Citation Envoyé par kululu Voir le message
    Kikoo

    J'ai un soucis en prolog : je suis un débutant et je voudrais en faite que prolog me donne la taille d'une liste
    Ex : taille([a,b,c],Res)
    Res doit me renvoyer 3

    Jai ça mais ça marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    taille([],_).
    taille([_|X],Res) :-  Res2 is Res+1 , taille(X,Res2) .
    Donc j'ai X qui est ma liste et Res le resultat
    Prolog prend le 1er charactere de la liste par recursion et je fais intervenir une variable Res2 qui est en faite l'incrementation de Res (j'ai essayer de mettre l'incrementation apres le taille(X,Res2) mais ça marche pas non plus)

    ps: je connais l'existance de length/2 mais je veux le recoder

    et si c'est pas trop vous demander j'ai une question subsidiaire :
    je voudrais creer permutation/2 en gros permutation([a,b,c],L) affiche les 6 solutions possibles (abc, acb, bac, etc )

    Merci à vous
    Juste un petit erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    /*Longeur du liste en mode (+,-)*/
    taille([],0).
    taille([_|X],Res):-  
        taille(X,M),
        Res is M + 1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    | ?- taille([a,b,c],N).
     
    N = 3
     
    yes
    {2}

    Permutation du liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    permu([],[]).
    permu(L,[X|P]):-
        select(X,L,LsansX),
        permu(LsansX,P).


    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
     
    | ?- permu([a,b,c],L).
     
    L = [a,b,c] ? ;
     
    L = [a,c,b] ? ;
     
    L = [b,a,c] ? ;
     
    L = [b,c,a] ? ;
     
    L = [c,a,b] ? ;
     
    L = [c,b,a] ? ;
     
    no
    {2}

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme prolog fonction séparation liste
    Par bougnbie dans le forum Prolog
    Réponses: 4
    Dernier message: 11/06/2013, 17h34
  2. Comptage et listing des résultats
    Par jkone95 dans le forum Requêtes
    Réponses: 4
    Dernier message: 27/03/2012, 17h05
  3. [SWI-Prolog] Couper une liste en 2
    Par SyntaxErrorAtLine4 dans le forum Prolog
    Réponses: 6
    Dernier message: 21/04/2008, 18h21
  4. [Débutant] Notation liste Prolog
    Par guillaume07 dans le forum Prolog
    Réponses: 3
    Dernier message: 23/08/2006, 21h05
  5. Comptage d'enregistrements d'une liste
    Par Virgile59 dans le forum IHM
    Réponses: 6
    Dernier message: 23/01/2006, 10h42

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