DenisHen Posté(e) le 8 juin 2006 Posté(e) le 8 juin 2006 Bonsoir à tous, Je cherche depuis deux jours...( heures) la façon de faire des "boucles" avec le Lisp... J'ai vu les While.... (tant que...) Mais je n'ai rencontré nul part de GoTo (ou autre chose s'en approchant...Je me suis donc retrouvé devant le livre de M. Contensou... Et j'en déduis que ce style de boucle est inutile avec ce langage... En effet, je croix curieusement qu'il faut construire la routine de façon à ce qu'elle fasse appelle à elle-même pour remplacer le GoTo. Mais je tatonne tellement que je me demande si j'avance ou si je fais tout simplement n'importe quoi.... Si les doyens peuvent éclairer les pauvres novices que nous sommes... Merci... 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)
(gile) Posté(e) le 8 juin 2006 Posté(e) le 8 juin 2006 Salut, On parle en LISP de fonction "itératives" et de fonctions "récursives" Les premières répètent les mêmes actions soit "tant que la condition est remplie" (while ...), soit un nombre défini de fois (repeat ...) soit pour chaque élément d'une liste (foreach ...) et (mapcar ...). Les fonctions récursives sont des des fonctions qui font appel à elles même dans leur propres définitions, créant un "empilement". C'est moins évident à comprendre, mais tellement élégant (avis personnel). Pour t'aider, tu peux utiliser la fonction TRACE dans la console VisualLISP. Par exemple tu charges la fonction FACT (un classique, voir le lien ci-dessous) et tu lances dans la console (trace fact) puis (fact 6) et tu ouvres la fenêtre suivi et tu verras l'empilement. Tu peux aussi voir dans la Faq AutoLISP ce chapitre et le suivant. Et quelques exemples de routines définies de manière itérative et récursive ici et là. [Edité le 8/6/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 8 juin 2006 Posté(e) le 8 juin 2006 SalutTu as quatre manières de faire des boucles (voir cinq avec la méthode récursive) La première avec le while que tu retrouves en vb (de mémoire un while...wend)ex : (setq test 1)(while (<= test 10) ..... (setq test (1+ test))) La seconde avec le foreach qui parcours une liste et qui le transmet dans une varaibleex : (foreach n '(a b c) (print n)) La troisième avec repeatex : (setq a 10 b 100) (repeat 4 (setq a (+ a 10)) (setq b (+ b 100))) La quatrième avec la fonction mapcar qui appelle une fonction sur une listeex : (setq a 10 b 20 c 30)(mapcar '1+ (list a b c)) Et je pourrai en rajouter un dernier avec vlax-for, mais on passe au vlisp ;) @+ :o Ah ben, je viens de me faire griller par (gile) :cool: [Edité le 8/6/2006 par Patrick_35] Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 8 juin 2006 Posté(e) le 8 juin 2006 C'est pas "grillé", nos réponses se complètent ;) Attention quand même, avec WHILE et les fonctions récusives, de s'assurer que la condition fasse qu'à un moment la boucle se termine ! Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 8 juin 2006 Auteur Posté(e) le 8 juin 2006 Merci à tous les deux... ( les grillés et les grilleurs.... :P ) Bon, je vais apprendre le Yoga et pratiquer le Zen... A cause des fonctions "itératives" et "récursives"... Je croix que je vais avoir du mal... M. Contensou en parlais déjà... Et vous aussi.... Pfffffffff.......... Je n'ai pas fini de bosser avant d'y arriver.... Bon....Ouais, je sais je suis lourd... (d'ailleurs, je pense à changer ma signature... ;) ) Mais j'ai encore une question qui traine.... Au boulo, On a AutoCAD 2004 et 2005, on a donc VLisp partout... Mais qu'a de plus VLisp ? Merci pour vos réponses... Je buche, je potasse et je décortique... ( je migraine aussi.. ;) ) 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)
DenisHen Posté(e) le 8 juin 2006 Auteur Posté(e) le 8 juin 2006 Merci Gile, tu me donne l'occasion d'apporter ma contribution.... ( Si je ne me fais pas "grillé) Attention quand même, avec WHILE et les fonctions récusives, de s'assurer que la condition fasse qu'à un moment la boucle se termine ! Il faut toujours s'assurer d'une condition "dépassante"... (Bien vu (gile))... C'est ce qu'on appelle un circuit fermé en électronique, une redondance cyclique chez Microsoft (redondance = cyclique, Microsoft aussi, se mort la queue...), un cercle rouge en politique, un cercle vicieux en boite de nuit... Et... Et ? Comment en informatique... ? ? ? Un BUG ! ! ! Oui, le plus gros problème en informatique : l'outil le plus évolué de l'évolution n'est qu'un insecte... Sommes-nous peu de chose....Ahhhhh, un peu d'humour ne fait pas de mal... Bon, mas brève contribution, si elle est juste, s'arrête déjà... Et, j'en suis sûr sera reprise.... Merci à tous.... ;) 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)
DenisHen Posté(e) le 8 juin 2006 Auteur Posté(e) le 8 juin 2006 J'ai un petit problème, (gile) Dans ta fonction (defun SOME (fun lst) (and (consp lst) (member T (mapcar fun lst)) ) ) Il y a and, et je ne trouve pas d'aide dessus, ni AutoCAD ni VLisp... ? Pourquoi ? 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 9 juin 2006 Posté(e) le 9 juin 2006 La fonction and est renseignée, comme les autres fonctions LISP, dans l'Aide aux développeurs -> AutoLISP Reference -> AutoLISP functions -> A Functions. Elle est aussi bien expliquée dans AIDACAD. L'expression : (and (consp lst)(member T (mapcar fun lst))) teste d'abord si lst est une liste non vide (consp lst), si ce n'est pas le cas, cesse l'évaluation et retourne nil, si oui continue l'évaluation et teste si un des éléments de lst retourne T à la fonction fun (member T (mapcar fun lst)), si cette dernière expression retourne nil l'expression complète (and ...) retourne nil, si la première expression ET la deuxième expression contenues dans le (and .. ) retournent T alors (and ... ) retourne T. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
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