Précédent   Forum du club des développeurs et IT Pro > Autres langages > Langages fonctionnels > Lisp
Lisp Forum d'entraide sur la programmation en langages fonctionnels Lisp et Common Lisp
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 30/10/2008, 11h03   #1
Titi41
Membre habitué
 
Homme Romain Marteau
Développeur Java
Inscription : 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 : 122
Points : 122
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
Titi41 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2008, 22h37   #2
Trap D
Rédacteur/Modérateur
 
Avatar de Trap D
 
Inscription : septembre 2003
Messages : 4 437
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 4 437
Points : 5 301
Points : 5 301
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
Trap D est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2008, 15h04   #3
LLB
Membre Expert
 
Inscription : mars 2002
Messages : 962
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 962
Points : 1 149
Points : 1 149
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.
LLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2008, 23h32   #4
Zavonen
Rédacteur
 
Avatar de Zavonen
 
Inscription : novembre 2006
Messages : 1 757
Détails du profil
Informations personnelles :
Âge : 65

Informations forums :
Inscription : novembre 2006
Messages : 1 757
Points : 1 705
Points : 1 705
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...)
Zavonen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2011, 20h13   #5
ouadie.boussaid
Invité de passage
 
Homme Ouadie BOUSSAID
Étudiant
Inscription : 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
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)
ouadie.boussaid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 18h04   #6
handetaker
Futur Membre du Club
 
Homme yorick
Étudiant
Inscription : avril 2011
Messages : 17
Détails du profil
Informations personnelles :
Nom : Homme yorick
Localisation : Finlande

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2011
Messages : 17
Points : 15
Points : 15
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 )
handetaker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 04h54   #7
ceciestunpseudo
Membre du Club
 
Inscription : août 2009
Messages : 38
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 38
Points : 51
Points : 51
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.
ceciestunpseudo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2011, 19h02   #8
handetaker
Futur Membre du Club
 
Homme yorick
Étudiant
Inscription : avril 2011
Messages : 17
Détails du profil
Informations personnelles :
Nom : Homme yorick
Localisation : Finlande

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2011
Messages : 17
Points : 15
Points : 15
"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.
handetaker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 03h46   #9
ceciestunpseudo
Membre du Club
 
Inscription : août 2009
Messages : 38
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 38
Points : 51
Points : 51
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.
ceciestunpseudo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 21h29.


 
 
 
 
Partenaires

Hébergement Web