DenisHen Posté(e) le 6 septembre 2022 Posté(e) le 6 septembre 2022 Bonjour à la communauté. J'essai de progresser en Lisp, et donc, en listes, et je pense que les fonctions (mapcar et (lambda devrait m'être utiles dans mon cas. Mais je n'en sort pas. J'ai deux listes, une pour des "lecteurs" et une pour des "chemins", c'est pour faire des recherches dans nos DD. J'ai donc mes deux listes : (setq ListLect '("C:\\" "D:\\" "O:\\" "Z:\\") ListChemin '("_OpaleCAD" "_OpaleCAD\\_OpaleGestion" "_OpaleCAD\\Bloc" "_OpaleCAD\\Cartouche" "_OpaleCAD\\Excel" "_OpaleCAD\\Hach" "_OpaleCAD\\Icones" "_OpaleCAD\\Lisp" "_OpaleCAD\\Menu" "_OpaleCAD\\Support" "_OpaleCAD\\VBA" ) ) ;_ Fin de setq Et je pensais à un petit truc dans ce genre : (setq ListComplet (mapcar '(lambda (ListLect ListChemin) (strcat ListLect ListChemin)))) J'ai bien entendu essayé plusieurs "orthographes" de code... Mais rien, j'ai du mal à conjuguer ces deux super fonctions. Vous aurez devinés mon but, fouiller certaint répertoires (ListChemin, toujours les mêmes) dans différents lecteurs (ListLect tous différents)... La structure de ListChemin est la même pour tous nos postes, mais pas les lescteurs (réseaux, locaux, USB, DD...) tous différents selon les PC. 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 6 septembre 2022 Posté(e) le 6 septembre 2022 Salut, Manifestement, tu n'as pas seulement "du mal à conjuguer ces deux super fonctions", tu as du mal à utiliser chacune séparément. Apprends d'abord à te servir de mapcar avec des fonctions natives (ou des defun) sur une ou plusieurs listes d'un côté et a comprendre le fonctionnement de lambda d'un autre. Tu pourras ensuite combiner les deux. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 6 septembre 2022 Auteur Posté(e) le 6 septembre 2022 Salut @(gile), merci pour ton aide. J'ai fais de petits exercices (grace à mon PDF de chevet : "introduction à AutoLisp" 😉 et au super site de @didier, j'ai aussi regardé les Lisp de LeeMac, mais là, je n'ai pas le niveau et des postes sur CadXP). J'avais réussi, il y a longtemps à faire un truc avec ces deux fonctions, mais je n'arrive plus à le retrouver. Que me conseils-tu ? 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)
DenisHen Posté(e) le 6 septembre 2022 Auteur Posté(e) le 6 septembre 2022 il y a 7 minutes, (gile) a dit : Apprends d'abord à te servir de mapcar avec des fonctions natives (ou des defun) sur une ou plusieurs listes d'un côté En récursivité ? Si c'est ça, tu me surestimes... 😉 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)
DenisHen Posté(e) le 6 septembre 2022 Auteur Posté(e) le 6 septembre 2022 J'avais pensé au début à faire deux (while, l'un dans l'autre ou deux (repeat , mais je pensais que (mapcar et (lambda feraient le boulo. Mais tu as raison, c'est peut-être hors de ma portée. Je ferais ce que je saurais peut-être faire, sans faire appel à ce que je ne connais pas. 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 6 septembre 2022 Posté(e) le 6 septembre 2022 Je pense que mapcar ne s'applique pas à ce que tu cherches à faire. Néanmoins je pense que comprendre comment agit cette fonction est fondamental dans l'apprentissage du LISP. Essaye de comprendre ces expressions en les testant dans la console puis en essayant de les modifier: Avec une liste : (mapcar 'itoa '(1 2 3 4)) Avec deux listes : (mapcar '+ (1 2 3) '(4 5 6)) (mapcar 'strcat '("a" "b" "c") '("1" "2" "3" "4" "5")) Avec un defun : (defun concatenerChaineEntier (str int) (strcat str (itoa int))) (concatenerChaineEntier "a" 1) (mapcar 'concatenerChaineEntier '("a" "b" "c") '(1 2 3)) Avec lambda (compare l'expression lambda avec le defun concatenerChaineEntier): (mapcar '(lambda (str int) (strcat str (itoa int))) '("a" "b" "c") '(1 2 3)) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 7 septembre 2022 Auteur Posté(e) le 7 septembre 2022 Bonjour @(gile)et merci pour tes explications. Je comprends mieux pourquoi je n'y arrivais pas. Du coup, j'ai écrit ça : (setq ListLect '("C:\\" "D:\\" "O:\\" "Z:\\") ListChemin '("_OpaleCAD" "_OpaleCAD\\_OpaleGestion" "_OpaleCAD\\Bloc" "_OpaleCAD\\Cartouche" "_OpaleCAD\\Excel" "_OpaleCAD\\Hach" "_OpaleCAD\\Icones" "_OpaleCAD\\Lisp" "_OpaleCAD\\Menu" "_OpaleCAD\\Support" "_OpaleCAD\\VBA" ) ListComplet (list) ) ;_ Fin de setq (foreach Lect ListLect ;boucle sur les lecteurs (foreach Chemin ListChemin ;boucle sur les chemins (setq ListComplet (append ListComplet (list (strcat Lect Chemin)))) ) ;_ Fin de foreach ) ;_ Fin de foreach J'ai trouvé plus judicieux l'utilisation de (foreach. 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 7 septembre 2022 Posté(e) le 7 septembre 2022 (setq ListLect '("C:\\" "D:\\" "O:\\" "Z:\\") ListChemin '("_OpaleCAD" "_OpaleCAD\\_OpaleGestion" "_OpaleCAD\\Bloc" "_OpaleCAD\\Cartouche" "_OpaleCAD\\Excel" "_OpaleCAD\\Hach" "_OpaleCAD\\Icones" "_OpaleCAD\\Lisp" "_OpaleCAD\\Menu" "_OpaleCAD\\Support" "_OpaleCAD\\VBA" ) ListComplet (apply 'append (mapcar '(lambda (lect) (mapcar '(lambda (chemin) (strcat lect chemin)) ListChemin ) ) ListLect ) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 7 septembre 2022 Auteur Posté(e) le 7 septembre 2022 Salut @(gile) et merci pour tes explications. C'est génial, je commence à comprendre, mais c'est un code hyper concis, je ne pense pas pouvoir recréer un code aussi "parfait", mais je pense comprendre. Il va me falloir encore du temps pour refaire un truc pareil. Encore merci à toi. 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)
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