Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous,

 

 

Je cherche à constituer le nom d'une variable avec une chaine de caractère et après connaitre le valeur attribué à cette variable.

 

pour avoir le nom de la variable j'ai procédé de cette façon :

(read(strcat "hand" ntxt))

ce qui me retoure

hand1

et à cette variable est affecté la valeur

"0"

or quand je fait

(if (= (read(strcat "hand" ntxt)) "0")...

il ne passe jamais la condition et quand j'espionne la valeur (read(strcat "hand" ntxt)) "0")il me renvoie hand1 mais ne passe pas le niveau après pour resortir "0"!

Je sais pas si j'ai été très clair...

Posté(e)

Bonjour,

 

Pour lire la valeur d'une variable tu peu faire un simple (princ mavar)

Et dans ton cas un simple (strcat ...) renvoie la valeur concatené des chaines de caractére qui suivent.

 

Ici (read(strcat "hand" ntxt)) ne sera jamais égal à "0", donc tu ne passera jamais à la suite.

En effet tu concaténe "hand" à ta variable ntxt, donc quelque soit la valeure de celle-ci tu aura toujours le préfixe "hand".

 

Donc tu peu tester de cette manière :

(if
   (eq
       (strcat "hand" ntxt)
       "hand0"
   )
   (...)
)

C'est en forgeant que l'on devient forgerons.

Et c'est en sciant que Léonard DeVinci!

Posté(e)

Bonjour,

 

Je suis pas sur d'avoir compris la réponse de alala mais en ajoutant (eval avant le (read tu devrais résoudre ton problème.

Il y a sans doute plus simple mais je suis pas un grand lispeur.

Olivier

Posté(e)

Outch effectivement je n'avais pas bien lu le provblème énnoncé.

Donc j'ai tout faux, et le "eval" est la solution.

Intéressant ce "read", couplé à un "set" et "eval" on definit autant de variables que necessaire.

 

J'me coucherais encore moin bête tien!

 

@+

C'est en forgeant que l'on devient forgerons.

Et c'est en sciant que Léonard DeVinci!

Posté(e)

Salut Patrick_35,

J'étais persuadé qu'il y avait plus simple. Ma réponse me semblait tortueuse.

Olivier

Quoi de plus simple que (eval (read (strcat "hand" ntxt)))

 

Je pense que tu as ces quatre sujets qui pourraient d'apporter des réponses (voir des questions)

http://cadxp.com/index.php?/topic/28642-arguments-et-variables/page__hl__setq

http://cadxp.com/index.php?/topic/29314-ces-listes-qui-nen-sont-pas/

http://cadxp.com/index.php?/topic/20170-elements-de-syntaxe-autolisp/

http://cadxp.com/index.php?/topic/29047-symbole-expression-variable/page__p__158235__hl__atom

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Bonjour,

 

Oui c'est exactemenent ce qui me fallait!

Oui je rentre dans la subtilité du Lisp, du moins je découvre les subtilités du Lisp !!

Merci

C’est la partie la plus gratifiante et stimulante du Lisp :rolleyes:

 

 

 

Ouais c'était mon problème editer autant de variables que nécessaire!

Mais merci quand même alala, c'est l'intention qui compte!! :)

 

Sinon, pour l’exemple un code similaire, déjà publié ici http://cadxp.com/index.php?/topic/33946-incrementer-le-nom-de-variable/

 

;; Renvoie une liste de symbol (chaques symbols contenant les coordonnées du point cliqué)
(defun point-xxx (i pt)
 (if pt
   (cons ((lambda (sym) (set sym pt) sym) (read (strcat "point" (itoa i))))(point-xxx (1+ i) (getpoint)))
 )
)

 

Pour tester (tapez entrée pour sortir de la function)

_$ (setq lstpoint (point-xxx 1 (getpoint)))
(POINT1 POINT2 POINT3 POINT4)
_$ (mapcar 'eval lstpoint) 
((8991.05 5763.28 0.0) (5813.38 8762.64 0.0) (13298.5 7457.04 0.0) (11180.1 5586.84 0.0))
_$

 

A+

(Ps : Sympa les liens de Patrick_35, ma préférence allant naturellement vers le 4ème :D )

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é