CadFrank Posté(e) le 19 janvier 2012 Partager Posté(e) le 19 janvier 2012 Bonjour, Je suis entrein de lire une livre sur AutoLisp. Et il arrive des fois qu'il donne des example de petite routine pour qu'on se pratique un peu. Par contre je fait cette routine de A à Z : (defun c: spirale(/ PT R NC N Centre) (setq PT (getpoint "\nPoint de départ: ")) (setq R (getdist PT "\nRayon de départ: ")) (setq NC (getint "\nNombre de cycle? : ")) (if(> NC 2) (progn (setq N 1) (Setq Centre (polar PT pi R)) (Tracer PT CE N) );progn );if );defun c: (defun Tracer(/ P1 CE N) (if (/= N NC) (progn (if (= (rem N 2) 0) (setq AN 0) (setq AN pi)) (command "_arc" P1 "_c" CE "_a" 180) (setq CE P1) (setq N(1+ N)) (setq P1 (polar P1 AN (* 2 R))) (setq R (* 2 R)) (Tracer P1 CE N) );progn );if (princ) );defun J'ai tout essayer et vu je connais pas encore l'interface Vlisp je sais pas comment le debuger. il me retourne l'erreur qui suit. ; error: bad DEFUN syntax: (C: SPIRALE (/ PT R NC N CENTRE) (SETQ PT (GETPOINT "\nPoint de départ: ")) (SETQ R (GETDIST PT "\nRayon de départ: ")) (SETQ NC (GETINT "\nNombre de cycle? : ")) (IF (> NC 2) (PROGN (SETQ N 1) (SETQ CENTRE (POLAR PT PI R)) (TRACER PT CE N)))) Aucune idee c'est quoi qui veux dire.. il peut pas etre plus claire se logiciel :blink: Merci pour votre aide. Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 19 janvier 2012 Partager Posté(e) le 19 janvier 2012 Salut, Difficile de se lancer dans la programmation sans connaître un peu d'anglais :error: bad DEFUN syntaxveut dire, en français : "erreur : mauvaise syntaxe de DEFUN".(defun sym ([arguments...] [/ variables...]) expr...) La fonction defun requiert :un premier argument de type symbole (le nom de la fonction définie) ; puis une liste contenant les arguments (optionnels) et, derrière une barre oblique (slash), les variables locales (optionnelles) ;et enfin, les expressions que la fonction devra exécuter.Si tu regardes attentivement la première ligne du code que tu as copié :(defun c: spirale(/ PT R NC N Centre)On y voit la fonction defun, un premier argument de type symbole : c:, un second argument de type symbole : spirale puis la liste des variables locales (pas d'arguments pour la fonction ici).Par rapport à la signature de la fonction defun, il y a un argument de type symbole en trop. En fait, une espace (oui, on dit bien une espace en typo) s'est glissée entre c: et spirale.Cette erreur aurait dû être facilement localisé car j'imagine qu'il est dit dans ce livre qu'on préfixe le nom de la fonction définie avec c: pour que cette fonction puisse être appelée comme une commande AutoCAD.Il faut donc corriger :(defun c:spirale(/ PT R NC N Centre) J'ose espérer que l'auteur de ce livre à volontairement laissé quelques erreurs (j'en vois au moins une autre dans le code que tu as posté) pour donner des exercices à ses lecteurs... Ne jamais perdre de vue que du code s'adresse à une machine qui est bien incapable d'interpréter une syntaxe ou une orthographe hasardeuse. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
CadFrank Posté(e) le 20 janvier 2012 Auteur Partager Posté(e) le 20 janvier 2012 Re bonjour, Tu veux dire qu'il y a encore une autre erreur. Bon je vais essayer de la trouver et si je suis pas capable je te fais signe haha !! Merci beaucoup pour l'aide. Lien vers le commentaire Partager sur d’autres sites More sharing options...
CadFrank Posté(e) le 20 janvier 2012 Auteur Partager Posté(e) le 20 janvier 2012 Toujour moi, autre petite question. Quand j'ai pris ma formation sur Autolisp mon professeur me disais de mettre les sub-routine avant le defun c: Et dans le livre il me mettre la sous routine apres. y a-t-il une différence ? Maintenant quand je charge la routine on me retourne ; 2 forms loaded from #<editor "L:/ECHAFAUDAGES/RÉFÉRENCES/BIBLIOTHÈQUE TECHNIQUE/AUTOCAD/ROUTINE LISP/spirale.lsp"> ce qui veux dire qu'il y a 2 formes chargé a partir de par contre si je lance le program apres avoir entré le nombre de cycle. On me retourne ; error: too many arguments donc , erreur trop d'argument. Lien vers le commentaire Partager sur d’autres sites More sharing options...
CadFrank Posté(e) le 20 janvier 2012 Auteur Partager Posté(e) le 20 janvier 2012 Bon avec plus de visualisation j'ai remarqué que si je change tracer pour trace il me donne plus d'erreur ; error: too many arguments Par contre la routine fait rien. Je suis un peu embêté Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 20 janvier 2012 Partager Posté(e) le 20 janvier 2012 j'ai remarqué que si je change tracer pour trace il me donne plus d'erreur Si, tu as une erreur (qui n'a rien à voir avec tracer ou trace) :; error: too many argumentsqui veut dire : "erreur: trop d'arguments" Ton bouquin ne t'explique donc rien en dehors d'exemples contenant des erreurs ? À mon avis, cet exemple veut montrer comment on appelle une fonction (la fonction tracer) depuis une autre (la fonction c:spirale) en lui passant des valeurs à l'aide d'arguments. Je te conseille la lecture de ce sujet (au moins jusqu'à la réponse #4 pour commencer) ainsi que les autres sujets mis en tête du forum Débuter en LISP. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
CadFrank Posté(e) le 22 janvier 2012 Auteur Partager Posté(e) le 22 janvier 2012 Bonjour Gile, J'ai commencer a lire le sujet dont tu me parle et je croit bien que c'est le type d'information que j'ai besoin pour m'instruire sur le LISP. Ton bouquin ne t'explique donc rien en dehors d'exemples contenant des erreurs ? Pour répondre a ceci non le bouquin n'explique rien sur les erreurs. Il donne plus de l'info sur les fonctions + des petites routines avec les fonctions inclu. Par contre je croit que en prennant le temps de lire quelque sujet sur ce site je réussirai a apprend bien vite. Merci encore te ton aide précieux. Lien vers le commentaire Partager sur d’autres sites More sharing options...
CadFrank Posté(e) le 23 janvier 2012 Auteur Partager Posté(e) le 23 janvier 2012 Bonjour Gile, Finalement j'ai trouver l'erreur de mon code, ce qui se trouve entre parenthèse apres le defun ne sont pas des variables locales mais des arguments. j'ai quand même une question je comprend la différence entre une variable locale et une variable globale. Par contre, ce que me tracasse le plus est le quand es-ce que dans ma routine je decide quel est locale ou globale. Salutation et remerciment ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
VDH-Bruno Posté(e) le 23 janvier 2012 Partager Posté(e) le 23 janvier 2012 Bonjour, ce que me tracasse le plus est le quand es-ce que dans ma routine je decide quel est locale ou globale.Dommage que je n’ai vraiment pas une minute à moi en ce moment pour fournir une réponse très détaillé, donc faute d’un long discourt je vais essayer de te donner un exemple qui te donnera peut être un élément de réponse… Dans ta console Visual Lisp ou sur ta ligne de commande AutoCAD tape par exemple l’instruction suivante :(setq CE '(10.0 10.0 10.0)) Et maintenant relance ta commande spirale tu devrais voir une des manifestations de la problématique que tu te poses.. Cordialement Apprendre => Prendre => Rendre Lien vers le commentaire Partager sur d’autres sites More sharing options...
CadFrank Posté(e) le 23 janvier 2012 Auteur Partager Posté(e) le 23 janvier 2012 Merci pour ta réponse, quoi que je ne suis pas plus le comment choisir locale ou globale. c'est p-e moi qui pige pas le LISP comme il le faut. La seule chose que j'ai remarqué c'est que la commande spirale divague un peu et aboutti a une erreur apres avoir tourné en ronde sans comprendre pourquoi elle s'arrete Salutations! Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 23 janvier 2012 Partager Posté(e) le 23 janvier 2012 Dans ce message qur je t'avais recommandé, il me semble avoir expliqué clairement, et avec des exemples, les différences entre variables globales et locales et l'intérêt qu'il y a, la plupart du temps, à déclarer localement les variables. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
CadFrank Posté(e) le 23 janvier 2012 Auteur Partager Posté(e) le 23 janvier 2012 Désolé, c'est peut-etre moi qui lit mal ou bien qui interpret mal se que tu veux explique. Si ce n'est pas trop demander aurait tu une autre facon de l'expliquer? sinon ce n'est pas trop grave je vais essayer de relire jusqu'a ce que sa me rentre dans la tete merci beaucoup pour ton aide elle est tres apprécié.. mes sincère salutations! Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 24 janvier 2012 Partager Posté(e) le 24 janvier 2012 Salut, À part quelques rares situations particulières, prends l'habitude de toujours déclarer tes variables en local. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
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