LAMBDA
Fonction anonyme
Cette fonction n'est pas à proprement parler une fonction de traitement des listes mais comme elle est très souvent utilisée conjointement à (mapcar) elle est classée dans ce menu.
Cette fonction sert à "définir" une "fonction anonyme", par exemple lorsque la définition d'une fonction (par defun) n'est pas vraiment nécessaire car employée temporairement dans le programme.
syntaxe : | (lambda arguments expr) |
Arguments : | Les arguments à traiter par expr |
expr | Une expression AutoLISP |
Valeur retournée : | La dernière valeur traitée |
Exemple :
Prenons le sempiternel exemple de la transformation des degrés en radians,
la formule est, pour mémoire, angle en degré divisé par 180 multiplié par pi.
On part d'une liste qui contient un ensemble de nombre précisant des valeurs en degrés décimaux et on va créer une fonction anonyme et l'appliquer à tous les élément de la liste grâce à (mapcar) pour traiter tous les éléments de la liste.
Définition de la liste de départ :
(setq liste1 '(45 90 180 270)) |
Lancement de la fonction dans cette ligne de code :
(setq liste2 (mapcar '(lambda (a) (* pi (/ a 180.0))) liste1)) |
Et dorénavant la variable liste 2 contient : (0.785398 1.5708 3.14159 4.71239) ce qui est bel et bien la transformation en radians des éléments de la liste1.
Cette fonction est quelque peu évoluée mais elle doit être bien maîtrisée pour faire des progrès en programmation AutoLisp.
Cette fonction est utilisée quand la nécessité de créer un (defun) n'est pas avérée, si on devait avoir à s'en servir à plusieurs endroits dans le programme, il serait donc préférable de créer une fonction avec (defun), en l'occurrence :
1 2 3 | (defun dtr (a) (* pi (/ a 180.0)) ) |
Ce qui facilitera d'autant la lisibilité du code lors de l'appel de la commande.
Milieu de deux points
Exemple parlant de (lambda) et souvent utilisé :
En donnant deux points en argument sous forme de liste (list) contenant les coordonnées X,Y et Z, on a besoin de trouver le milieu des ces deux points, typiquement faire la moyenne de l'addition de chaque coordonnée X,Y et Z voici comment faire :
Définition des deux points de base :
1 2 | (setq pt1 '(-1.23 1.23 0.0)) (setq pt2 '(3.0 3.0 2.0)) |
Calcul du point milieu :
1 2 3 4 5 | (setq pmil (mapcar '(lambda (a b ) (/ (+ a b) 2.0)) pt1 pt2 ) ) |
Bingo !!! : la variable "pmil" contient :
(0.885 2.115 1.0)
7 décembre 2017,
mise à jour le 31 mars 2018