Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 9 sur 9
  1. #1
    Membre habitué
    Homme Profil pro Romain Marteau
    Développeur Java
    Inscrit en
    avril 2007
    Messages
    375
    Détails du profil
    Informations personnelles :
    Nom : Homme Romain Marteau
    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 : 121
    Points
    121

    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
    Inscrit en
    septembre 2003
    Messages
    4 563
    Détails du profil
    Informations forums :
    Inscription : septembre 2003
    Messages : 4 563
    Points : 5 993
    Points
    5 993

    Par défaut

    Je te conseille d'étudier ce petit programme (ecrit en Scheme)
    Code :
    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 : Intérieur avec jeune femme de Vilhelm Hammershoi

  3. #3
    LLB
    LLB est déconnecté
    Membre Expert
    Inscrit en
    mars 2002
    Messages
    962
    Détails du profil
    Informations forums :
    Inscription : mars 2002
    Messages : 962
    Points : 1 263
    Points
    1 263

    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
    Inscrit en
    novembre 2006
    Messages
    1 767
    Détails du profil
    Informations personnelles :
    Âge : 67

    Informations forums :
    Inscription : novembre 2006
    Messages : 1 767
    Points : 1 851
    Points
    1 851

    Par défaut

    Code :
    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
    Invité de passage
    Homme Profil pro Ouadie BOUSSAID
    Étudiant
    Inscrit en
    juin 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Nom : Homme Ouadie BOUSSAID
    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
    Membre à l'essai
    Homme Profil pro yorick
    Étudiant
    Inscrit en
    avril 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Nom : Homme yorick
    Localisation : Finlande

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2011
    Messages : 27
    Points : 23
    Points
    23

    Par défaut

    Ben c'est simple!!!! ce programme fais ce que tu désires salut!!!
    Code :
    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
    Inscrit en
    août 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : août 2009
    Messages : 38
    Points : 54
    Points
    54

    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
    Membre à l'essai
    Homme Profil pro yorick
    Étudiant
    Inscrit en
    avril 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Nom : Homme yorick
    Localisation : Finlande

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2011
    Messages : 27
    Points : 23
    Points
    23

    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
    Inscrit en
    août 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : août 2009
    Messages : 38
    Points : 54
    Points
    54

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •