Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous.

 

Voilà, je vois souvent les pros du lisp placer des setq dans des if

 

Perso, j'ai "appris" comme-ça :

  (setq ech (vlax-ldata-get "DenisH" "Ech"))
 (if ech
   (princ "\nEchelle connue)
   (princ "\nEchelle inconnue)
 )

 

Mais je vois souvent des trucs comme :

(if (setq ech (vlax-ldata-get "DenisH" "Ech"))
   (princ "\nEchelle connue)
   (princ "\nEchelle inconnue)
 )

 

Y-a-t'il une "norme" ou de l'aide sur la "méthode" car je n'ai rien trouvé comme réelles explications la dessus ?

 

Et l'un va-t'il plus vite que l'autre ?

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Coucou

 

Les deux se font ...il n'y a pas plus de "norme" que ça...

 

Quant à la vitesse !!! si ça ça joue c'est à n'y rien comprendre.

 

Puisque tu es dans l'apprentissage, regarde la fonction COND elle te sera utile si tu as plus de deux choix (vrai ou faux)

 

Amicalement

Posté(e)

Oui pour COND

(princ(cond((setq ech (vlax-ldata-get "DenisH" "Ech"))
     (setq rien nil)
     "\nEchelle connue")
    ("\nEchelle inconnue")))

L'avantage de COND c'est aussi qu'il rend inutile les PROGN

J'adore !

Ici, j'ai appliqué le principe du SETQ dans l'évaluation mais j'ai même glissé l'expression dans le princ !

  • Upvote 1

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Salut,

 

Petits rappels.

 

En LISP toute expression retourne une valeur.

Un appel de la fonction setq retourne la valeur de l'évaluation de la dernière expression, dans ton cas, le résultat de l'évaluation de l'expression :

(vlax-ldata-get "DenisH" "Ech")

Autrement dit :

(setq ech (vlax-ldata-get "DenisH" "Ech"))

retourne la même chose que :

(vlax-ldata-get "DenisH" "Ech")

Qui correspond à la valeur de :

ech

 

En LISP, une condition (telle que requise par if, cond, etc.) est considérée comme "vraie" tant qu'elle n'est pas nil (T n'est qu'un cas particulier pour "vrai").

 

LISP est défini récursivement : une expression LISP est un atome ou une liste d'expressions LISP.

On perçoit bien là comment LISP rime avec imbrication, mais ça n'est pas une "norme" on peut préférer écrire un style plus séquentiel/procédural ou se noyer dans les parenthèses :

(princ
 (if (setq ech (vlax-ldata-get "DenisH" "Ech"))
   "\nEchelle connue"
   "\nEchelle inconnue"
 )
)

  • Upvote 1

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Re,

 

Personnellement je n'utiliserais pas cond s'il n'y a qu'une condition (comme c'est le cas ici).

 

Par contre cond peut-être intéressant pour affecter à une variable soit une valeur stockée (ldata par exemple) soit une valeur par défaut (et la stocker du même coup) :

(setq ech (cond
    ((vlax-ldata-get "DenisH" "Ech"))
    ((vlax-ldata-put "DenisH" "Ech" 1.0))
  )
)

que je trouve plus élégant que :

(if (not (setq ech (vlax-ldata-get "DenisH" "Ech")))
 (setq ech (vlax-ldata-put "DenisH" "Ech" 1.0))
)

ou même :

(or 
 (setq ech (vlax-ldata-get "DenisH" "Ech"))
 (setq ech (vlax-ldata-put "DenisH" "Ech" 1.0))
)

  • Upvote 1

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Salut.

 

Un grand merci à vous tous pour toutes ces explications, claires et limpides...

 

C'est vrai que je ne pense jamais à cond, c'est dommage...

 

Je perd beaucoup de temps à faire des if avec des conditions à perte de vu...

 

Faut que je m'y mette...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

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é