Aller au contenu

Messages recommandés

Posté(e)

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

Posté(e)

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

Posté(e)

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

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é