Clément.a Posté(e) le 26 février 2013 Posté(e) le 26 février 2013 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...
alala Posté(e) le 26 février 2013 Posté(e) le 26 février 2013 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!
-Olivier- Posté(e) le 26 février 2013 Posté(e) le 26 février 2013 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
Patrick_35 Posté(e) le 26 février 2013 Posté(e) le 26 février 2013 Salut Je vois que tu commences à rentrer dans les subtilités du dcl et du lisp ;)La réponse d'-Olivier- est excellente. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
-Olivier- Posté(e) le 26 février 2013 Posté(e) le 26 février 2013 Salut Patrick_35,J'étais persuadé qu'il y avait plus simple. Ma réponse me semblait tortueuse.Olivier
Clément.a Posté(e) le 26 février 2013 Auteur Posté(e) le 26 février 2013 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
alala Posté(e) le 26 février 2013 Posté(e) le 26 février 2013 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!
Clément.a Posté(e) le 26 février 2013 Auteur Posté(e) le 26 février 2013 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!! :)
Patrick_35 Posté(e) le 26 février 2013 Posté(e) le 26 février 2013 Salut Patrick_35,J'étais persuadé qu'il y avait plus simple. Ma réponse me semblait tortueuse.OlivierQuoi 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__setqhttp://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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
VDH-Bruno Posté(e) le 26 février 2013 Posté(e) le 26 février 2013 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 !!MerciC’est la partie la plus gratifiante et stimulante du Lisp 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
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