DenisHen Posté(e) le 29 juin 2017 Posté(e) le 29 juin 2017 Bonjour à tous. Aujourd'hui, j'essai d'ajouter des paires pointées à une liste de ... paires pointées.. J'ai ça :(setq LstEntete (cons Lst "Aucun"))Qui me donne bien :_$ LstEntete(1 . "Aucun")Mais je n'arrive pas à ajouter des paires pointées à cette liste :(setq LstEntete ((list LstEntete (cons Lst Entete))))ou j'ai maintenant :_$ (cons Lst Entete)(2 . "Bâtiments")Bien sur, Lst est incrémenté quelque-part entre ces lignes... J'ai lu et relu "Introduction_a_AutoLISP" de (gile), mais je crois que je tourne en rond... Si quelqu'un a une astuce, un conseil... Je suis preneur... 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)
vincentp010 Posté(e) le 29 juin 2017 Posté(e) le 29 juin 2017 (setq LstEntete ((list LstEntete (cons Lst Entete))))Tu as déjà une paire de parenthèses en trop dans ta ligne.(setq LstEntete (list LstEntete (cons Lst Entete))) Aide au téléchargement du cadastre dgfip-download-helper Insertion de photos géolocalisées exif https://www.dropbox.com/s/gkf6o9ac2hxen97/exifscr.zip?dl=0 Script correction BUG SPDC V2, propriétaire département 21 et 22 : https://greasyfork.org/scripts/442400-spdcv2/code/SPDCV2.user.js
DenisHen Posté(e) le 29 juin 2017 Auteur Posté(e) le 29 juin 2017 Salut Vincent, et merci pour ton aide. Ça fonctionne presque ! Le résultat est :_$ LstEntete(((((((((((((((((((((((((((((((((((1 . "Aucun") (2 . "Bâtiments")) (3 . "Cadastre")) (4 . "Chemin de fer")) (5 . "Clôture")) (6 . "Courbes de niveaux")) (7 . "Jeux")) (8 . "Mobilier Urbain")) (9 . "Repère")) (10 . "Signalisation horizontale")) (11 . "Signalisation verticale")) (12 . "Talus")) (13 . "Titre")) (14 . "Topographie")) (15 . "Végétation")) (16 . "Détection Arrosage")) (17 . "Détection Assainissement")) (18 . "Détection Chaleur / Calorifuge")) (19 . "Détection Produits Chimiques")) (20 . "Détection Eau Pluviale")) (21 . "Détection Eau Potable")) (22 . "Détection Eau Usée")) (23 . "Détection Éclairage Public")) (24 . "Détection Électrique (BT + HT)")) (25 . "Détection Électrique BT")) (26 . "Détection Électrique HT")) (27 . "Détection Fibre optique")) (28 . "Détection Gaz")) (29 . "Détection Multiples")) (30 . "Détection Non Identifié")) (31 . "Détection Signalisation Lumineuse Tricolore")) (32 . "Détection Télécommunication")) (33 . "Détection Téléreport")) (34 . "Détection Unitaire")) (35 . "Détection Vidéo")) Il y a des listes DANS des listes, toutes pointées... Une idée ? 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)
VDH-Bruno Posté(e) le 29 juin 2017 Posté(e) le 29 juin 2017 (modifié) Bonjour, Une liste se construit par la tête "car" si tu utilises la fonction de constructeur de liste cons, sinon utilise append si tu veux mettre des listes bout à bout... ;; Créer une paire pointée (setq dotpair (cons 1 "toto")) -> (1 . "toto") ;; Créer une liste contenant une paire pointée (setq lstdotpair (cons dotpair nil)) -> ((1 . "toto")) ;; ou (setq lstdotpair (list dotpair )) -> ((1 . "toto")) ;; Ajouter une paire pointé à la liste de paire pointée (setq lstdotpair (cons (cons 2 "titi") lstdotpair)) -> ((2 . "titi") (1 . "toto")) A l'occasion je t'invite à relire cette discussion http://cadxp.com/topic/29314-ces-listes-qui-nen-sont-pas/page__view__findpost__p__159425 A+ Modifié le 29 juin 2017 par VDH-Bruno Apprendre => Prendre => Rendre
DenisHen Posté(e) le 29 juin 2017 Auteur Posté(e) le 29 juin 2017 Salut Bruno... Mille merci, c'est nickel... A part l'ordre invers, mais je ne pense pas que ça posera problème avec un (assoc... Encore merci à tous... 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)
VDH-Bruno Posté(e) le 29 juin 2017 Posté(e) le 29 juin 2017 Salut Bruno... Mille merci, c'est nickel... A part l'ordre invers, mais je ne pense pas que ça posera problème avec un (assoc... Encore merci à tous... D'où l'utilité de travailler avec assoc et les paires pointées, comme dans les codes dxf.Sinon la fonction reverse est ton amie _$ (reverse '((2 . "titi") (1 . "toto"))) ((1 . "toto") (2 . "titi")) A+ Apprendre => Prendre => Rendre
DenisHen Posté(e) le 30 juin 2017 Auteur Posté(e) le 30 juin 2017 Salut. Merci Bruno pour ton aide. Mais je n'arrive pas à inverser ma liste par son nom, j'ai essayé plusieurs de trucs :_$ LstEntete((35 . "Détection Vidéo") (34 . "Détection Unitaire") (33 . "Détection Téléreport") ......_$ (reverse '(LstEntete))(LSTENTETE)_$ (reverse (LstEntete))_$ LstEntete((35 . "Détection Vidéo") (34 . "Détection Unitaire") (33 . "Détection Téléreport") ......_$ (reverse (list (LstEntete)))_$ LstEntete((35 . "Détection Vidéo") (34 . "Détection Unitaire") (33 . "Détection Téléreport") ......_$ (reverse LstEntete); erreur: liste incorrecte: "Aucun"_$ (reverse 'LstEntete); erreur: type d'argument incorrect: listp LSTENTETE_$ (reverse (list LstEntete))(((35 . "Détection Vidéo") (34 . "Détection Unitaire") (33 . "Détection Téléreport")......_$ LstEntete((35 . "Détection Vidéo") (34 . "Détection Unitaire") (33 . "Détection Téléreport")...... [/Code] Rien ne fonctionne et je n'ai vraiment pas l'habitude des listes... 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)
(gile) Posté(e) le 30 juin 2017 Posté(e) le 30 juin 2017 Salut, LstEntete est une "variable" à laquelle tu as assigné une liste (pls précisément, un symbole auquel tu as attaché une valeur de type liste).Donc passer la "variable" (le symbole) à une fonction est équivalent à passer sa valeur (la liste) à la fonction. (reverse '(1 2 3)) ; => (3 2 1) (setq lst '(1 2 3)) ; => (1 2 3) (reverse lst) ; => (3 2 1) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 30 juin 2017 Auteur Posté(e) le 30 juin 2017 Bonjour (gile), et merci pour ton aide. Mais si je fais ce qui suit, la console me sort une erreur :_$ LstEntete ((35 . "Détection Vidéo") (34 . "Détection Unitaire") ...... (2 . "Bâtiments") 1 . "Aucun") _$ (reverse LstEntete) ; erreur: liste incorrecte: "Aucun" Je viens de voir qu'il manque une parenthèse avant la dernière paire 1 . "Aucun". Tu as une idée ? Car là, je rame... ;) 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)
(gile) Posté(e) le 30 juin 2017 Posté(e) le 30 juin 2017 Regarde bien ta liste, la dernière paire pointée n'en est pas une :((35 . "Détection Vidéo") (34 . "Détection Unitaire") ...... (2 . "Bâtiments") 1 . "Aucun") il faudrait :((35 . "Détection Vidéo") (34 . "Détection Unitaire") ...... (2 . "Bâtiments") (1 . "Aucun")) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 30 juin 2017 Auteur Posté(e) le 30 juin 2017 Merci (gile), c'est ce que je viens de voir dans le message #9. Mais où je me suis trompé dans la construction de ma liste ? 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)
(gile) Posté(e) le 30 juin 2017 Posté(e) le 30 juin 2017 Je ne sais pas comment tu as construit ta liste, mais tu peux faire quelque chose comme ça : (setq l '("Aucun" "Bâtiments" "Cadastre" "Chemin de fer" "Clôture" "Courbes de niveaux" "Jeux" "Mobilier Urbain" "Repère" "Signalisation horizontale" "Signalisation verticale" "Talus" "Titre" "Topographie" "Végétation" "Détection Arrosage" "Détection Assainissement" "Détection Chaleur / Calorifuge" "Détection Produits Chimiques" "Détection Eau Pluviale" "Détection Eau Potable" "Détection Eau Usée" "Détection Éclairage Public" "Détection Électrique (BT + HT)" "Détection Électrique BT" "Détection Électrique HT" "Détection Fibre optique" "Détection Gaz" "Détection Multiples" "Détection Non Identifié" "Détection Signalisation Lumineuse Tricolore" "Détection Télécommunication" "Détection Téléreport" "Détection Unitaire" "Détection Vidéo" ) ) (setq i 0) (setq LstEntete nil) (foreach n l (setq i (1+ i) LstEntete (cons (cons i n) LstEntete) ) ) (setq LstEntete (reverse LstEntete)) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 30 juin 2017 Auteur Posté(e) le 30 juin 2017 Que dire... Nickel... J'ai toujours des problèmes dès que je touche aux listes... Ce qui est un comble, je l'avoue, en LISP. :huh: Merci mille fois Maître (gile)... Non, le titre "Maître" n'est pas usurpé... ;) 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)
(gile) Posté(e) le 30 juin 2017 Posté(e) le 30 juin 2017 Non, le titre "Maître" n'est pas usurpé... ;)Et moi qui aspire à n'avoir ni Dieu ni maître... De manière plus "fonctionnelle" on peut aussi faire : (setq l '("Aucun" "Bâtiments" "Cadastre" "Chemin de fer" "Clôture" "Courbes de niveaux" "Jeux" "Mobilier Urbain" "Repère" "Signalisation horizontale" "Signalisation verticale" "Talus" "Titre" "Topographie" "Végétation" "Détection Arrosage" "Détection Assainissement" "Détection Chaleur / Calorifuge" "Détection Produits Chimiques" "Détection Eau Pluviale" "Détection Eau Potable" "Détection Eau Usée" "Détection Éclairage Public" "Détection Électrique (BT + HT)" "Détection Électrique BT" "Détection Électrique HT" "Détection Fibre optique" "Détection Gaz" "Détection Multiples" "Détection Non Identifié" "Détection Signalisation Lumineuse Tricolore" "Détection Télécommunication" "Détection Téléreport" "Détection Unitaire" "Détection Vidéo" ) ) (setq i 0) (setq LstEntete (mapcar '(lambda (x) (cons (setq i (1+ i)) x)) l)) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 30 juin 2017 Auteur Posté(e) le 30 juin 2017 Et moi qui aspire à n'avoir ni Dieu ni maître...Tu n'en n'as pas, tu en es un... Nuance. ;) Je me doutais bien qu'intervenir sur une liste depuis une autre, tu allais finir par le couple mapcar / lambda... Effectivement, ça me met le pied à l'étrier... Encore un grand merci à toi... 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)
(gile) Posté(e) le 30 juin 2017 Posté(e) le 30 juin 2017 Je me doutais bien qu'intervenir sur une liste depuis une autre, tu allais finir par le couple mapcar / lambda... C'est précisément le propos de mapcar que de retourner la liste des résultats de l'exécution d'une fonction sur chacun des élément d'une liste. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
VDH-Bruno Posté(e) le 4 juillet 2017 Posté(e) le 4 juillet 2017 Je me doutais bien qu'intervenir sur une liste depuis une autre, tu allais finir par le couple mapcar / lambda... Effectivement pour retourner une liste depuis une liste le couple mapcar/lambda est une évidence, mais les fonctions récursives aussi car elles empilent et dépilent les appels de la même manière qu'est construite une liste.. (defun indLst (i l) (if l (cons (cons i (car l)) (indLst (1+ i) (cdr l))) ) ) _$ (indLst 1 '("tata" "toto" "titi" "tutu")) ((1 . "tata") (2 . "toto") (3 . "titi") (4 . "tutu")) A+ Bruno Apprendre => Prendre => Rendre
DenisHen Posté(e) le 5 juillet 2017 Auteur Posté(e) le 5 juillet 2017 Salut Bruno, et merci pour cette précision. 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)
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant