VDH-Bruno Posté(e) le 17 mars 2011 Posté(e) le 17 mars 2011 Bonsoir, Voilà quelques lignes de codes prétexte à démontrer la souplesse du lisp, et peut être à aider certains à mieux appréhender ce qu’est un symbole (arguments, variables, expressions, fonctions.. suivant le type de donné référencé), ainsi que les fonctions set quote (ou ‘) et setq. Pour mémoire (setq sym '(expr..)) <=> (set 'sym '(expr..)) Un code classique avec defun (Calcul de la surface d’un rectangle) (defun srec () (alert (strcat (rtos (* (getreal "\nLargeur? ") (getreal "Longueur? "))) " est sa surface!!!" ) ) (princ) ) Qui une fois chargé s’exécute de la manière suivante :Ligne de commande Commande: (srec)Ou console Visual LISP _$ (srec) La fonction srec peut elle même être affectée à un symbole quoté (setq arec '(srec)) que l’on pourrait lancé avec la fonction eval _$ (eval arec) Sur le même principe on pourrait très bien envisager de se passer de la définition de fonction defun (setq srec '(progn (alert (strcat (rtos (* (getreal "\nLargeur? ") (getreal "Longueur? "))) " est sa surface!!!" ) ) (princ) ) ) Qui une fois chargé s’exécute de la manière suivante :Ligne de commande Commande: (eval srec)Ou console Visual LISP _$ (eval srec) (Dans des fichiers de chargement automatique et des boutons de macro c'est transparent et fonctionne comme la fonction defun ;) ). L’intérêt de ces dernières lignes de codes… Aucun, sauf peut être d’apporter un éclairage différent sur la compréhension des symboles et des fonctions associés que sont: set quote setq. - Edit du 01/01/2020 -En complémément vous trouverez Ici un lien plus explicite et détaillé. Cordialement, Apprendre => Prendre => Rendre
(gile) Posté(e) le 17 mars 2011 Posté(e) le 17 mars 2011 Salut, La fonction srec peut elle même être affectée à un symbole quoté (setq arec '(srec)) que l’on pourrait lancé avec la fonction eval_$ (eval arec) ou plus directement : (setq ares srec)_$ (arec) on pourrait très bien envisager de se passer de la définition de fonction defun Différence notable, ton exemple retourne une liste (un peu comme la fonction defun-q qui, elle, ne nécessite pas d'utiliser eval), un defun retourne un objet de type USUBR (ou SUBR) qui est une compilation de la fonction (pas une compilation en langage machine puisque LISP est un langage interprété, mais un objet compilé dans le langage de l'interpréteur). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
VDH-Bruno Posté(e) le 17 mars 2011 Auteur Posté(e) le 17 mars 2011 Oui (gile) très juste, merci d’avoir complété, j’avais bien vu pour la différence entre defun et defun-q mais j’ai pas eu le courage d’aller jusque là, car pas certain que j’étais d’intéresser grand monde avec cette subtilité.. Il est vrai que l’illustration avec defun-q aurait été plus judicieuse, car –q rappel l’expression quoté qui est affecté au symbole quoté srec. A+ Bruno Apprendre => Prendre => Rendre
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