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

Lisp Discussion :

liste en plusieur sous liste


Sujet :

Lisp

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 46
    Par défaut liste en plusieur sous liste
    Bonjour je debute en lisp et j'ai un probleme avec un programme en faite j'aimerai transformer une liste en sous liste exemple
    (kakashi05) et j'aimerai obtenir ((k)(a)(k)(s)(h)(i)(0)(5))
    je vous montre mon code et quelque precision lorsque la liste est vide il me renvoi bien "vide" par contre il n'arrive pas à executé la deuxieme condition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CL-USER 17 : 6 >  (defun pointe (liste)
                      (cond 
                       ((null liste) (print "vide"))
                       (t ( cons ( car liste ) pointe ( cdr liste)))))
    POINTE
     
    CL-USER 18 : 6 > pointe ()
     
    "vide" 
    "vide"
    voila l'erreur que j'obtiens lorsque je lui passe des parametres à la liste
    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
    24
    25
     
    CL-USER 19 : 6 > pointe (kakashi05)
     
    Error: Undefined operator KAKASHI05 in form (KAKASHI05).
       1 (continue) Try invoking KAKASHI05 again.
       2 Return some values from the form (KAKASHI05).
       3 Try invoking something other than KAKASHI05 with the same arguments.
       4 Set the symbol-function of KAKASHI05 to another function.
       5 Set the macro-function of KAKASHI05 to another function.
       6 (abort) Return to level 6.
       7 Return to debug level 6.
       8 Return to level 5.
       9 Return to debug level 5.
      10 Return to level 4.
      11 Return to debug level 4.
      12 Return to level 3.
      13 Return to debug level 3.
      14 Return to level 2.
      15 Return to debug level 2.
      16 Return to level 1.
      17 Return to debug level 1.
      18 Return to level 0.
      19 Return to top loop level 0.
     
    Type :b for backtrace, :c <option number> to proceed,  or :? for other options
    si quelqu'un à une idee je suis preneur
    Merci

  2. #2
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    En bref tu veux transformer chaque élément de la liste d'origine en liste de 1 élément...
    En Haskell on ferait ça comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    toListOfLists xs = map (\x -> [x]) xs
    En Lisp je te conseille de faire de même : utiliser mapcar (équivalent de map en Haskell) et une fonction qui prend un argument et renvoie une liste de 1 élément.

    (en Haskell on ferait plutôt "toLOfL = map (:[])" directement en fait mais bon...)

    --
    Jedaï

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par défaut
    Citation Envoyé par kakashi05 Voir le message
    Bonjour je debute en lisp et j'ai un probleme avec un programme en faite j'aimerai transformer une liste en sous liste exemple
    (kakashi05) et j'aimerai obtenir ((k)(a)(k)(s)(h)(i)(0)(5))
    je vous montre mon code et quelque precision lorsque la liste est vide il me renvoi bien "vide" par contre il n'arrive pas à executé la deuxieme condition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    (defun pointe (liste)
        (cond ((null liste) (print "vide"))
               (t ( cons ( car liste ) pointe ( cdr liste)))))
    Bon alors pour commencer kakashi05 c'est un seul élément syntaxique. Avec ton idée, tu n'obtiendras pas ((k)(a)(k)(s)(h)(i)(0)(5)) mais (kakashi05). Par contre tu obtiendrais ce que tu veux avec '(k a k a s h i 0 5).

    Si on est d'accord avec ça, en ne gardant pas l'idée de Jedaï car il faudrait que tu en sois rendu là dans ton cours et bien que sa solution proposée soit ultimement le meilleur choix, il me semble que tu as la bonne idée, mais que tu as fais une simple erreur de syntaxe qui buste tout ton programme. Je te rappelle qu'en LISP on préfixe les opérateurs et les fonctions.

    Sinon, bien entendu, (print "vide") ne saurait être une valeur à retourner.

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 46
    Par défaut
    je vous remercie pour vos reponses mais je pense que je suis tres proche de la solution lol et c'est vrai qu'il faut que je note '(k a k a s h i 0 5) deja

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 46
    Par défaut
    J'ai trouvé la solution et j'avais un peu oublier de mettre la correction apres avoir fait de nombreux test voila le resultat que j'ai obtenu merci à vous tous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CL-USER 4 : 1 > (defun pointe (liste)
                       (cond 
                        ((null liste) ())
                        (t (cons (cons (car liste) ()) (pointe (cdr liste)))
                           )))
    POINTE
     
    CL-USER 5 : 1 > (pointe '(k a k a s h i 0 5))
    ((K) (A) (K) (A) (S) (H) (I) (0) (5))

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par défaut
    Sais-tu que pour créer une liste, tu disposes aussi de la fonction list ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (defun pointe (liste)
        (cond 
            ((null liste) ())
            (t (cons (list (car liste)) (pointe (cdr liste))) )))
    Ça ne change pas grand chose cependant. Ton code est correct cette fois.

  7. #7
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 46
    Par défaut
    voila une autre maniere de le faire avec la commande liste mais je l'a trouve un peu compliquer voila pourquoi j'ai preferer l'afficher l'autre bref voila le code et merci à vous tous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CL-USER 6 : 1 > (defun pointe (mot)
    (cond ((null mot) 'vide)
    (t (append (list(cons(car mot)())) (pointe (cdr mot))))))
    POINTE
     
    CL-USER 7 : 1 > (pointe '(k a k a s h i 0 5))
    ((K) (A) (K) (A) (S) (H) (I) (0) (5) . VIDE)

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

Discussions similaires

  1. [Toutes versions] Excel: Liste de plusieurs sous ensembles par article
    Par HellVetik dans le forum Excel
    Réponses: 8
    Dernier message: 12/05/2015, 19h01
  2. [Python 2.X] liste, distributivité et sous liste
    Par loblique dans le forum Général Python
    Réponses: 6
    Dernier message: 18/12/2014, 15h05
  3. Parcours de listes et de sous listes.
    Par alcibiade dans le forum Lisp
    Réponses: 8
    Dernier message: 10/05/2011, 00h19
  4. Des listes et ses sous listes
    Par {F-I} dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 23/10/2008, 08h06
  5. Réponses: 5
    Dernier message: 06/05/2007, 19h29

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