Me revoici avec une petite question technique pour vous !
Voilà le topo :
Nous avons les éléments suivants en place :
Une list of text que nous allons nommer « La liste ».
Une variable number que nous allons nommer « Le nombre ».
Ces deux éléments sont déclarés de manière globale. Ils existent donc en permanence.
Au cours d’une procédure, le nombre adopte divers valeurs, par exemple 3, 1 puis 5. À chaque changement de valeur, il est ajouté dans la liste donc sous forme de chaîne de caractères, par exemple comme ceci :
add "La valeur est [Le nombre]" to la liste;
Plus tard, la liste est affichée. Voici ce qu’elle va montrer :
5 parce que c’est la dernière valeur de notre variable.
Comment faire en sorte que la liste conserve la valeur du nombre à l’instant où il est ajouté et non la valeur actuelle du nombre ? Comment faire en d’autres termes pour qu’elle affiche :
On dirait que ce qui se passe, c’est que ta liste contient des chaînes « La valeur est [Le nombre] », et que le remplacement par la valeur du nombre se fait au moment d’afficher la chaîne de caractères. En d’autres termes, quand tu l’ajoutes il garde les crochets, quand tu l’affiches il va regarder la valeur et remplace par la valeur, mais à ce moment-là tu as déjà changé ta valeur, donc c’est fichu.
Je pense que la solution pourrait être de faire que ta liste soit une liste de nombres (add Lenombre to la liste), puis faire un bout de code qui afficherait le truc sous le format que tu veux, un truc du genre "pour chacune des valeurs de la liste, afficher « La valeur est [valeur] ». Ça marche (je pense) parce que quand tu met un entier dans une liste il met la valeur de l’entier, pas juste une référence à ta variable.
Merci Mule hollandaise pour ta réponse.
Il se passe effectivement cela. La variable entre crochet dans une chaîne de caractère est une référence à celle-ci, non sa valeur.
La solution que tu préconise devrait marcher, mais ce n’est pas ce que je recherche. Dans mon cas, je tiens à afficher une liste de chaîne de caractères, pas seulement des nombres.
Je suis en mesure de bricoler. Par exemple, je peux utiliser des variables différentes pour éviter ce problème. Il est peut-être aussi possible de s’en sortir avec des variables temporaires. Si elles n’existent plus au moment de l’affichage, peut-être que la chaîne de caractères gardera leur valeur.
Mais peut-être qu’I7 offre une solution simple dans ce cas de figure, par exemple un mot clef qui indique de mettre la valeur, non de faire une référence. C’est cela que je recherche avant de me tourner vers les plans B. ^^
Je suppose que vous en savez déjà sur la base et notions de programmation ?
Je pense que le mieux serait de chercher avant tout dans la documentation afin de voir comment trouver le ou les « mot(s) clé(s) ». (Si ce n’est pas déjà fait)
À mon avis toutes les réponses à vos questions sont ici: inform7.com/learn/man/WI_1_1.html
Il y a plus cas…
Je vous recommande de regardez dans les sections suivante: types, texte, tableaux et listes.
Et surtout vous référer aux algorithmes de tri qui vous aidera je pense.
Ainsi que voir plus en détail sur qu’es-ce qu’une structure de données exactement.
Ceci dis, je procéderais de cette façon: Je signale que je n’ai pas vérifier quoi que ce soit avant toute chose !
Voici le pseudo-algorithme
1- Initialiser les variables et leurs types (que cela soit un, voir plusieurs nombre(s) et/ou caractère(s) n’a pas d’importance car tout deux sont possible)
2- Ajouter vos valeurs dans une liste (pour permette de trouver vos nombres et/ou vos caractères)
3- Créer une boucle d’incrémentation de type for (qui lira la liste/tableau afin de chercher et sélectionner la/les valeur(s) souhaité)
4- Mettre une condition (comme quoi la valeur en question et vrai sinon détecter une erreur)
5- Afficher le résultat
Et j’insiste qu’en aucun cas je tiens la solution à votre problème parce que vous seul la détiendrez grâce à/par l’apprentissage et l’expérience Tout ceci n’est que théorie et hypothèse, je suis loin de la un programmeur professionnel lol
Mule a raison. Quand tu stockes ton texte, tu ne stockes pas une chaîne (dans le sens traditionnel du terme) mais un morceau de chaîne plus une routine qui affiche ton nombre. Du coup, la routine est évaluée à chaque fois que tu affiches le texte, qui montre alors la dernière version de la variable.
Et I7 offre bien une solution : il suffit d’écrire
add the substituted form of "La valeur est [Le nombre]" to la liste;
et Inform remplacera toutes les substitutions avant de stocker le texte.
Voir la section 20.7 de la doc. À noter que cette technique n’existe que depuis 6L. Pour 6G, le comportement était moins bien défini : le texte était substitué dans certains cas précis, mais on ne pouvait pas le forcer.
Et merci pour toutes ces infos LoubiTek, mais je ne pense pas qu’on ait besoin d’avoir des infos aussi pointues. Inform 7 n’est pas vraiment un langage conventionnel, alors il y a souvent des solutions différentes par rapport aux autres langages. Et tout le monde ici sait que la doc I7 existe. Je la connais limite par cœur, mais quand on ne sait pas exactement quoi chercher ça peut être lourd parfois. C’est tellement plus facile de poser une question sur le forum. ^^
@ Natrium :
Clair, net et précis. Que demander de plus ? ^^
@ LoubiTek :
Merci d’avoir pris le temps de rédiger cette réponse fort bien fournie. Je me sers de la documentation d’informe régulièrement et à mon stade actuel de la connaissance du langage, je crois pouvoir me sortir d’à peu près toutes les situations. Cela-dit, puisqu’il y a sur ce forum des spécialistes d’informe, Natrium pour ne citer que lui, j’aime poser des questions sur certains points afin d’obtenir des solutions idéales et ainsi ajouter toujours plus de corde à mon arc. Voyez, cette fois, comme toutes les autres, il m’apporte le saint graal !