Aller au contenu

Comment faire une liste de paires pointés ?


Messages recommandés

Posté(e)

Bonjour à tous.

 

Voilà, je cherche à utiliser le super lisp de Maître (gile) : "InputBox", que j'utilise déjà dans d'autres codes.

 

J'ai une liste "simple", en faite, c'est la liste des vues enregistrées dans un dessin, et je cherche à les placer dans le "InputBox" qui ne veux qu'une liste de paires pointés.

 

Je suis sûr que ça va se passer avec des lambda et des mapcar, mais je n'arrive même pas à écrire une ligne correcte... En fait, je ne sais absolument pas par où commencer.

 

Je suppose qu'il devrait il y avoir aussi un strcat... Mais je rame comme jamais...

 

Si quelqu'un a une astuce, un conseil ou un début de solution, Je suis preneur...

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Je pense que tu veux plutôt parler de OptionBox ou ListBox.

Toutes deux prennent en argument une liste de paires pointées (key . label).

 

si je comprends bien, tu veux utiliser la même valeur comme clé et comme libellé à savoir le nom de la vue.

 

Tu as donc une liste de type :

'("A" "B" "C")

et il te faut :

'(("A" . "A") ("B" . "B") ("C" . "C"))

autrement dit :

(list (cons "A" "A") (cons "B" "B") (cons "C" "C"))

et c'est exactement ce que fait :

(mapcar 'cons '("A" "B" "C") '("A" "B" "C"))

 

PS : un exemple est donné dans les commentaires de ListBox avec (layoutlist).

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

Posté(e)

Pour mémoire :

(mapcar 'fun '(a b c))

est équivalent à :

(list (fun a) (fun B) (fun c))

et :

(mapcar 'fun '(a b c) '(d e f))

à :

(list (fun a d) (fun b c) (fun c f))

où fun est une fonction qui peut être une fonction LISP prédéfinie, une fonction LISP définie avec (defun ...) ou une fonction lambda qui prend un seul argument dans le premier cas et deux dans le second.

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

Posté(e)

Salut (gile), ouiiiii, tu as raison, je voulais parler de ListBox... Au temps pour moi...

 

Je ne savais pas qu'une paire pointé pouvait être "double", comme ("A" . "A"), je pensais qu'il fallait systématiquement ((key1 . label1) (key2 . label2) ...) où key=nombre et label=chaine...

 

Je sais gérer les paires pointés du types

(setq LstProject '((1 . "Lambert 1 NORD") (2 . "Lambert 2 Etendu") (3 . "CC48")))

Mais je ne sais pas si je vais m'en sortir avec ton type de liste où les clefs et les chaines sont les mêmes... Car ta fonction ListBox retourne un nombre. Peut-être devrais-je utiliser (nth ?

 

Enfin, je vais essayer de faire quelque-chose avec ça...

 

merci encore pour ton aide...

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

C'est ma faute, j'avais mal lu, c'est pour ça que j'ai retiré ma phrase tout de suite.

 

J'ai cru être aller assez vite pour que personne ne la lise... Perdu... :huh:

 

Encore merci...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Alors ça, ça me la coupe... :)

 

Mais je comprend maintenant pourquoi je me suis trompé, je n'utilise que des paires pointés (nombre . chaine), donc, le retour était toujours un nombre... En fait, c'était la clef, quelle qu'elle soit, nombre ou chaine...

 

Encore merci... Une fois de plus... ;)

 

Voici mon test final, que je vais intégrer à mon code qui en avait besoin :

(defun c:CherchView (/ TblView LstView ValView)
 (while (setq TblView (tblnext "VIEW" (not TblView)))
   (setq LstView (cons (cdr (assoc 2 TblView)) LstView))
 ) ;_ Fin de while
 (setq LstView (vl-sort LstView '<))
 (setq ValView (listbox "Choix de la vue" "" (mapcar 'cons LstView LstView) 1))
 (princ ValView)
 (princ)
) ;_ Fin de defun

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Oulala, je comprend maintenant que je me bornais à des paires pointés ((nombre . chaine)...) et je faisais, à posteriori, le tri avec (assoc entre la clef retournée par ListBox avec la liste originale...

 

Maintenant, ma clef va être la chaine grace à ce type de paire : ((chaine1 . chaine1) (chaine2 . chaine2)...) et plus d'assoc pour connaitre le choix de l'opérateur...

 

Encore un grand merci (gile) pour tes explications et cette commande : ListBox, que j'utilise souvent...

 

J'avais bien lu ton exemple dans la fonction ListBox, mais j'ai zappé à cause du mapcar, que j'ai toujours du mal à comprendre, mais je ne perd pas espoir... Grace à vous tous... ;)

 

Un Denis content... ;)

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

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é