Matt666 Posté(e) le 11 juin 2007 Posté(e) le 11 juin 2007 Bonjour ! voilà j'ai une question pour vous autres maîtres lispien.... Le problème c'est que je ne sais pas comment formuler ma question !! Deux points, ouvrez les parenthèses :J'ai vu lors de l'utilisation de plusieurs routines qu'on pouvait directement donner une variable, ou un texte, ou une liste après avoir écrit la routine... C pas très clair ! Exemples : ([Nom de la routine] "texte")(filename-base "c:\\acadwin")(y en a qui se reconnaitront, ou plutôt qui reconnaitront leurs routines) ([Nom de la routine] liste)(remove_doubles '(0 1 2 1 3 0)) Bon... C'est bien beau tout ça, mais ça me dépasse complètement ! Par exemple j'aimerais bien faire la même chose avec un pickset... genre(hachure (ssget)) Voilà voilà... J'entends des ricanements derrière....Didon. Si vous pouviez m'éclairer un peu, ce serait pas mal sympa de votre part ! Merci d'avance, et adtal comme on dit par chez nous ! Matt. "Chacun compte pour un, et nul ne compte pour plus d'un."
(gile) Posté(e) le 11 juin 2007 Posté(e) le 11 juin 2007 Salut, Il ne s'agit pas de variable(s) mais d'argument(s). Comme certaines fonctions LISP, les routines peuvent nécessiter des arguments. Une routine est, en quelque sorte, une nouvelle fonction LISP que l'on a défini. Par exemple la fonction sin nécessite un nombre comme argument : (sin) retourne ; "; erreur: nombre d'arguments insuffisants"(sin "a") retourne "; erreur: type d'argument incorrect: numberp: "a"" tout comme remove_doubles nécessite une liste : (remove_doubles) retourne : "; erreur: nombre d'arguments insuffisants"(remove_doubles "a") retourne : "; erreur: type d'argument incorrect: consp "a"" Dans la définition d'une routine, les arguments sont spécifiés dans la première expression après le (defun ...), avant le slash (/), les variables locales après ce slash. Par exemple si on voulait faire une routine qui cherche un fichier DCL d'après un chemin complet et qui, si elle ne le trouve pas, crée ce fichier.La routine devrait avoir 2 arguments, le nom du fichier avec son chemin complet et le code à écrire s'il faut créer le fichier : (defun makedcl (filename code / file) (or (findfile filename) (and (setq file (open filename "w")) (write-line code file) (close file) ) ) ) Où filename et code sont les arguments de la routine et file une variable locale.Pour exécuter cette routine, il serait impératif de spécifier les deux arguments dans son appel. (makedcl "C:\\LISP\\getblock.dcl" "getblock:dialog{ label=\"Choisir un bloc\"; key=\"box\"; :boxed_column{ :row{ :column{ spacer; :text{ label=\"Nom :\"; alignment=left; } } :column{ :button{ label=\"Parcourir...\"; key=\"wbl\"; alignment=right; fixed_width=true; } spacer; } } :edit_box{ key=\"tp\"; edit_width=25; } :popup_list{ key=\"bl\"; edit_width=25; } spacer; } ok_cancel; }" ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Matt666 Posté(e) le 12 juin 2007 Auteur Posté(e) le 12 juin 2007 Oui d'accord, en fin de compte on créé nos propres routines lisp, qu'on peut utiliser quand on veut, à la seule condition de l'avoir chargé (forcément). Ce qui m'intrigue, c'est comment la routine reconnait des variables qu'elle n' a jamais défini !!! A part après la définition du nom de la routine (defun c:name (arguments)), je sais pas comment la routine peut reconnaitre une variable.. Mais je crois que c'est ça... En fait on définit les arguments au début de la routine.... Cool, ok c'est bon ! Merci de ta réponse !! Bonne journée. A bientot ! Matt. "Chacun compte pour un, et nul ne compte pour plus d'un."
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