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 :

probleme avec les listes Swi prolog


Sujet :

Prolog

  1. #1
    Nouveau Candidat au Club
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    1
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut probleme avec les listes Swi prolog
    bonjour,
    je cherche comment résoudre ce probleme avec swi prolog:
    j'ai une liste triée comme ca [5,6,7,7,8,9,9,9] et je veux avoir en sortie une liste de cette sorte [5,6,[7,7],8,[9,9,9]] cad mettre les entiers egaux dans une liste.
    Merci

  2. #2
    Membre actif
    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
    Points : 255
    Points
    255
    Par défaut
    Et quel est ton problème? As-tu déjà écrit quelque chose? Ou tu ne vois pas du tout comment faire ça?

  3. #3
    Membre confirmé Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Points : 477
    Points
    477
    Par défaut
    J'ai bien une solution, mais en utilisant le prédicat atomic(X) ou is_list(X) donc ce n'est pas très élégant.
    La science est ce que nous comprenons suffisamment bien pour l'expliquer à un ordinateur. L'art, c'est tout ce que nous faisons d'autre.
    Donald E. Knuth

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 25
    Points : 24
    Points
    24
    Par défaut
    un début de tentative , j'extrait E1 et E2 de la liste, il reste R, Q est le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ?-  [1,2,3,3,4,5]=..[_,E1,List|_], List =[E2|R],( E1 = E2 ->  Q=[E1,E2]; Q=E1).
    E1 = 1,
    List = [2, 3, 3, 4, 5],
    E2 = 2,
    R = [3, 3, 4, 5],
    Q = 1.
    ?- [1,1,3,3,4,5]=..[_,E1,List|_], List =[E2|R],( E1 = E2 ->  Q=[E1,E2]; Q=E1).
    E1 = 1,
    List = [1, 3, 3, 4, 5],
    E2 = 1,
    R = [3, 3, 4, 5],
    Q = [1, 1].
    mais je "cale" pour généraliser, et c'est pas trop déclaratif.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 25
    Points : 24
    Points
    24
    Par défaut
    "En m'inspirant fortement" d'une des solutions de l'énoncé 09 sur les "99 problems of lisp" :
    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
    18
    19
    20
    21
    22
    23
     
    % le paquet d'une liste vide c'est vide
    paquet([],[]).
    %le paquet X est [X]
    paquet([X], [[X]]).
    % le paquet si les elements se repetent
    paquet([X|Y], [[X,X|Y1]|Z1]) :- paquet(Y, [[X|Y1]|Z1]).
    % le paquet si les elements sont differents
    paquet([X|Y], [[X],[X1|Y1]|Z1]) :- paquet(Y, [[X1|Y1]|Z1]), X \== X1.
    % le paquet minimun est une paire [X] que je raccourcis en X
    % pour une longueur de [X] > 1 je garde tel que.
    raccourcir([],[]).
    raccourcir([X|L],[T|R]):-
    	length(X,V),
    	(    V = 1 ->
    	X=[T]
    	;
    	T=X
    	),
    	raccourcir(L,R).
     
    % la demande Li = liste en analyse et Lo = la réponse.
    paqueter(Li,Lo) :- paquet(Li,L),raccourcir(L,Lo).
    j'aurais aimé ne pas créer la règle raccourcir afin de ne pas scruter la liste L, mais la règle paquet ne fonctionne que sur des listes car il aurait fallu traiter des cas particuliers ...
    une idée

Discussions similaires

  1. [Débutant] probleme avec les listes
    Par ay-escoba dans le forum C#
    Réponses: 2
    Dernier message: 07/06/2013, 09h51
  2. Problem avec les list horizentale
    Par mehdi_scofield dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 29/10/2008, 16h39
  3. probleme avec les listes deroulantes
    Par mans27 dans le forum JSF
    Réponses: 18
    Dernier message: 15/06/2007, 10h48
  4. Probleme avec les cmd LIST ou NLST
    Par enox dans le forum Développement
    Réponses: 4
    Dernier message: 16/05/2005, 01h47
  5. [langage] probleme avec les listes dans des listes
    Par pqmoltonel dans le forum Langage
    Réponses: 7
    Dernier message: 27/04/2004, 12h32

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