Aller au contenu

Messages recommandés

Posté(e)

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."

Posté(e)

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

Posté(e)

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."

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité