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 :

Comment ajouter un élément en fin de liste ?


Sujet :

Lisp

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2007
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 375
    Points : 154
    Points
    154
    Par défaut Comment ajouter un élément en fin de liste ?
    Bonjour,

    Je recherche une fonction similaire à cons, mais au lieu d'ajouter un élément en début de liste, cette fonction ajouterai en fin de liste.

    Par exemple avec la liste ((B T) (C T)). Je veux ajouter cet élément (A T) pour obtenir cette liste ((B T) (C T) (A T))

    Merci de votre réponse

  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
    Je te conseille d'étudier ce petit programme (ecrit en Scheme)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (define (parcours-liste l)
      (if (null? l) '()
          (cons (car l) (parcours-liste (cdr l)))))
    Il te donne pratiquement la solution
    "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
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    Par défaut
    Tu souhaites utiliser une fonction de la bibliothèque, peut-être ?
    Je n'utilise pas Lisp, mais il me semble que append corresponde à tes besoins.

  4. #4
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (defun append (x  L)
       (if (null L) (list x)
         (cons (car L) (append x (cdr L)))))
    Devrait faire l'affaire
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Titi41 Voir le message
    Bonjour,

    Je recherche une fonction similaire à cons, mais au lieu d'ajouter un élément en début de liste, cette fonction ajouterai en fin de liste.

    Par exemple avec la liste ((B T) (C T)). Je veux ajouter cet élément (A T) pour obtenir cette liste ((B T) (C T) (A T))

    Merci de votre réponse
    >append L '(6)
    ou :
    >append L (list '6)
    ou bien
    >L
    (4 5)
    >( reverse (cons 6 (reverse L)))
    (4 5 6)

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 27
    Points : 31
    Points
    31
    Par défaut
    Ben c'est simple!!!! ce programme fais ce que tu désires salut!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    (defun cons_fonction(LISTE element)
      (if (listp element) 
        (setf z (cons element () ))
        (setf z  (cons element () ))
      )
         (if (null LISTE)
           nil
           (do ((i (length LISTE) (- i 1)))
           ((equal i 0) z)
           (setf z  (cons (nth (- i 1) LISTE) z))
           )
         )
    )
    si LISTE=(1 2 3 4 ) et element = a le résultat sera : (1 2 3 4 a) si LISTE=((A B) (C D ) e (E F) ) et element= (D G) ou element= c resultat : (((A B) (C D ) e (E F) ) (D G)) ou ((A B) (C D ) e (E F) c )

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2009
    Messages : 38
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par handetaker Voir le message
    Ben c'est simple!!!! [...]
    Ah non désolé... ce que tu écris est fort compliqué. Mais peut-être était-ce volontaire ? Les autres réponses exhibent des réponses bien plus simples.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 27
    Points : 31
    Points
    31
    Par défaut
    "reverse" est une fonction bien plus simple à utiliser ok . Généralement quand on demande de faire ce type d'exo on interdit d'utliser des fonctions comme tels !!! justement d'ou le nom de "exercice" si non y'a pas "d'exercices! . Je les fais sans utiliser cette fonction !!!! en tout cas la fonction "reverse" fonctionne ainsi!!! l'appréciation est à TITI ( l'auteur de l'exercice qui est sans réponse depuis un moment).
    Citation Envoyé par ceciestunpseudo Voir le message
    Ah non désolé... ce que tu écris est fort compliqué. Mais peut-être était-ce volontaire ? Les autres réponses exhibent des réponses bien plus simples.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2009
    Messages : 38
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par handetaker Voir le message
    "reverse" est une fonction bien plus simple à utiliser ok . Généralement quand on demande de faire ce type d'exo on interdit d'utliser des fonctions comme tels !!! justement d'ou le nom de "exercice" si non y'a pas "d'exercices! . Je les fais sans utiliser cette fonction !!!! en tout cas la fonction "reverse" fonctionne ainsi!!! l'appréciation est à TITI ( l'auteur de l'exercice qui est sans réponse depuis un moment).
    Tu utilises un itérateur do et deux affections setf. Si c'est un exercice (ce que je suspecte aussi) je doute que ce soit prévu. Il y a une solution purement fonctionnelle sans itération ni affectation. Et elle est plus courte et simple que la tienne. Tu fais du LISP en pensant C/C++/Java (je te laisse choisir). C'est une mauvaise façon de faire.

    TITI ne répondra probablement pas. Sa question date de 3 ans ou presque.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/10/2009, 16h07
  2. [AC-2003] comment ajouter un élément dans une liste avec InputBox
    Par spacesheep dans le forum VBA Access
    Réponses: 6
    Dernier message: 02/10/2009, 13h33
  3. Réponses: 8
    Dernier message: 01/03/2008, 13h33
  4. Comment ajouter un élément à une TListBox
    Par hijodelanoche dans le forum Composants VCL
    Réponses: 4
    Dernier message: 24/11/2005, 17h05
  5. Réponses: 3
    Dernier message: 07/10/2005, 12h07

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