Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

 

Ca fait une semaine que je galère avec un problème de liste et là j'en ai plus que marre alors je demande un peux d'aide.

 

 

Je ne sais d'ailleurs pas si ce que je veux faire est possible du moins sans déployer un code style usine à gaz.

 

 

Voici le problème si toutefois quelqu'un aurai une idée de génie :

 

 

Je crée deux listes

 

 

(setq liste1 ("a" "b" "c"))

 

(setq liste2 ("1" "2" "3"))

 

 

Et j'aimerai les combiner de manière à avoir une troisième liste qui ressemble à ça :

 

 

(setq liste3 (("a1" "a2" "a3") ("b1" "b2" "b3") ("c1" "c2" "c3")))

 

 

ou ça :

 

 

(setq liste3 ("a1" "a2" "a3" "b1" "b2" "b3" "c1" "c2" "c3"))

 

 

 

Je poste tout de même le dernier bout de code que j'ai pondu même si il est complètement faux.

 

 


(foreach liste1

(list "a" "b" "c")

	(foreach liste2

		(list "1" "2" "3")

			(setq c (append(liste1 liste2)))

	)

)

 

 

Merci de m'avoir lu et bonne soirée

 

Prospoule

Posté(e)

Bonjour,

 

Ton idée de départ avec foreach est bonne.

Voici comment tu pourrais la tourner.

 

(setq liste1 '("a" "b" "c" "s" "u" "y"))
(setq liste2 '("1" "2" "3" "4" "0"))
(setq liste3
 ((lambda (l1 l2 / l0)
   (setq l0 nil)
   (foreach n l1 (list (foreach nj l2 (setq l0 (cons (strcat n nj) l0)))))
   (reverse l0)
 ) liste1 liste2)
)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Salut,

 

Je ne sais pas si tu considère l'utilisation de la fonction mapcar avec des expressions lambda comme du "code style usine à gaz".

Si c'est le cas, je te conseille vivement de passer outre ces à priori et d'essayer de comprendre ces fonctions fondamentales en LISP (une petite explication ici).

Quand on maitrise l’utilisation de mapcar, ce sont les codes qui n'utilisent pas cette fonction là où ils le pourraient qui ressemblent à des "usines à gaz"...

 

(setq liste1 '("a" "b" "c" "d") liste2 '("1" "2" "3"))

(mapcar
 '(lambda (lettre)
    (mapcar
      '(lambda (nombre) (strcat lettre nombre))
      liste2
    )
  )
 liste1
)

 

Liste retournée :

(("a1" "a2" "a3") ("b1" "b2" "b3") ("c1" "c2" "c3") ("d1" "d2" "d3"))

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Bonjour et tout d'abord merci d'avoir répondu si rapidement.

 

Les deux méthodes fonctionnent parfaitement et je vais les étudier toutes les deux.

 

Je débute tout juste avec les boucles et je ne connais pas encore la fonction mapcar. Je ne trouve pas qu'utiliser la fonction mapcar soit une méthode usine à gaz mais j'avais peur que la solution que l'on me proposerais serait monstrueusement compliquée.

 

Je vous remercie encore.

 

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité