DEFUN

Définir une commande

Avec (defun) on entre dans le vif du sujet on dirait bien ...
car defun est la contraction de define function.

il faut utiliser defun pour créer une fonction dans un programme AutoLISP ou Visual Lisp
c'est à dire :
- un nom de nouvelle commande utilisable dans AutoCAD
- une fonction à l'intérieur d'un programme AutoLISP ou Visual Lisp

(defun nom_fonction ([arguments] [/ variables...]) code_de_programmation)

nom_fonctionun Symbol  nommant la fonction.
Argumentsles noms des arguments attendus par la fonction
(il peut n'y avoir qu'un seul argument)
Variablesle nom de la (ou des) variable(s) locale utilisée(s) par la fonction
code_de_programmationune suite d'expressions AutoLisp à évaluer pour que la fonction s'exécute
  • Le slash précédant les noms des variables doit être séparé du premier nom local et du dernier argument, le cas échéant, par au moins une espace.
  • Si vous ne déclarez pas d'arguments ou de Symbols locaux (variables locales), vous devrez a minima taper une paire de parenthèses (ouvrante puis fermante) après le nom de fonction.
  • Si des arguments ou nom de symboles locaux sont dupliqués AutoLisp ne va traiter que la première occurrence et négligera les suivants en doublons.

À la fin de l'exécution de la fonction la valeur retournée est la dernière expression évaluée.

Notez bien que la parenthèse fermante appairée à celle qui est avant le mot defun se trouvera en toute fin de définition de la fonction, soit après le code de programmation définissant cette dernière.

(defun) définit le nom de la commande principale, il n'est pas obligatoire que le nom du fichier lisp soit le même, il est possible de définir la commande toto dans le fichier "tata.lsp".


defun c:

Le "c:" n'est pas une lettre de lecteur, cela signifie qu'une fois le fichier chargé (load)  on pourra lancer le nom de la commande sans la mettre entre parenthèses, comme une commande en AutoCAD natif.
Les lignes de codes après (defun c: peuvent contenir d'autres définitions de commandes par (defun)


les variables : locales ou pas ?

une variable est définie par la fonction (setq) et une valeur lui est affectée
la "portabilité" des variables, locales ou pas, est expliquée dans (setq).


La fonction n'a pas d'argument ni de variable locale :

( defun ma_fonction ( )
   code_de_programmation ...
) ; fin du defun ma_fonction

La fonction a deux arguments, x et y :

(defun ma_fonction (x y)
 code_de_programmation ... )
 ; fin du defun ma_fonction

La fonction a deux variables locales a et b :

(defun ma_fonction (/ a b)
code_de_programmation ...
 ) ; fin du defun ma_fonction

La fonction a un argument (x) et une variable locale (temp)

(defun ma_fonction (x / temp)
code_de_programmation ...
 ) ; fin du defun ma_fonction


Il ne faut pas utiliser le nom d'une fonction AutoLisp comme nom de Symbol en argument à (defun).
Cela remplacerait le nom initial de la fonction originale et cette dernière ne serait plus accessible, il s'agit des fonctions détaillées sur ce site mais aussi T (la lettre T qui signifie TRUE, il y a aussi la valeur de pi (le fameux nombre utile aux sages) qui est préenregistrée dans le logiciel avec une flopée de décimales qui permet des calculs ultra-précis.

Voir les explications de atoms-family à ce sujet.
Liste des fonctions de gestions des Symbols :
atom   atoms-family   boundp   not   null   numberp   quote   set   setq   type
vl-symbol-name   vl-symbol-value   vl-symbolp


Haut de page 

continuer vers SETQ

retour au menu ENVIRONNEMENT


7 juillet 2017,
mise à jour le 18 décembre 2017
mise à jour le 22 mars 2019