Réécriture d'une référence/documentation BASIC CASIO ? - Débat
Posté le 17/09/2022 13:34
Bonjour à tous !
Ça fait un moment que je n'en ai pas parlé (ni d'ailleurs avancé dessus) - si jamais qqn s'en rappelle
- , mais j'avais envie de réécrire une référence et documentation BASIC CASIO complète.
J'écris simplement ce message-ci, car après déjà quelques heures passées à écrire cette documentation, je m'en suis (un peu) lassé...
J'aimerais donc savoir si ce projet intéresserait du monde, et si d'autres personnes pourraient aider (comme par ex les instructions BASIC Casio de Graph 90+E). Il faudrait peut-être aussi un relecteur, un "UI designer" (je suis une grosse sauce pour ça ), ajouter des liens vers des tutos (comme Super Drawstat), bref toute aide est la bienvenue. Donc si des gens arrivent à me motiver, je peux très bien continuer mais je ne le ferai pas si ça n'intéresse que 3~4 badauds malheureusement.
Pourquoi refaire la documentation ?
Tout simplement : elle est pauvre ! Il y a peut-être bien un manuel officiel, mais il manque énormément d'informations.
Voici quelques notes que j'ai pu relever au fur et à mesure de mes "tests":
- seulement 3 fonctions gèrent les Erreurs Maths : Graph (plot), SolveN(), et les fonctions récursives.
- Min() Max() Mean(),... peuvent prendre 1 OU 2 arguments, chacun étant soit réel soit complexe
- Fill(nbr, listmat) : listmat peut être "List 1", "Mat A", ou simplement "1" !
- ...
J'en passe, bien évidemment, mais beaucoup ont les mêmes possibilités que Fill(). Le problème c'est que (quasi) personne ne le sait, alors que ça permet d'optimiser et réduire le code !
Il y a aussi d'autres fonctions dont la documentation est simplement trop pauvre, comme les fonctions de récurrence.
Bref, il y a matière à faire (et à apprendre), mais aussi d'innombrables lignes à écrire, voilà donc pourquoi j'aimerais avoir des retours avant de me lancer concrètement dans ce projet pharaonique (à mon sens).
Citer : Posté le 17/09/2022 13:40 | #
Il y avait un topic là-dessus. J'étais totalement pour. Je te retrouve ça...
Citer : Posté le 17/09/2022 14:18 | #
Finalement, tu l'as retrouvé plus vite que moi : c'était tes messages ici : https://www.planet-casio.com/Fr/forums/topic8833-170-suggestions-remarques-et-ameliorations-pour-planete-casio.html#182552
En cherchant, j'ai cependant retrouvé quelques topics peu célèbres qui valent la peine d'être liés/abordés je pense (commentaires compris) :
https://www.planet-casio.com/Fr/forums/topic15295-1-des-fonctions-utiles-et-meconnues-basic.html
https://www.planet-casio.com/Fr/forums/topic16153-1-basic-avance-boucles-fonctions-sans-sous-programme-continue-et-break.html
https://www.planet-casio.com/Fr/forums/topic14940-1-benchmarks-sur-le-basic-casio.html
https://www.planet-casio.com/Fr/forums/topic15423-1-faire-une-sauvegarde-transparente-en-basic.html
https://www.planet-casio.com/Fr/forums/topic14903-1-graphismes-pousses-en-basic.html (commentaires surtout)
Et sinon, je voulais pointer un aspect en particulier : ce serait bien de classifier quels arguments peuvent être des expressions versus des litéraux. Par exemple, Str doit être un litéral, eg. Str 12 mais pas Str (X+1). Par opposition, List supporte les expressions, eg. List (X+Y) fonctionne. L'adressage par nom (List "MONJEU") supporte même les Str (List Str 1). Cependant, je ne crois pas qu'elle supporte les expressions sur les Str (List (Str 1+Str 2)).
Citer : Posté le 17/09/2022 14:31 | #
D'acc merci pour ces liens
Je pense que ce que je vais faire maintenant : encore un peu restructurer ce que j'ai déjà fait, puis continuer à un rythme d'escargot tout ça.
Peut-être aussi réécrire ce que j'ai déjà fait ? Par exemple voici ce que j'ai écrit pour List :
Les différentes listes se trouvent dans l'application STAT : (MENU) + (2).
On peut aussi obtenir la commande List en appuyant sur (SHIFT) + (1).
L'argument <String|N> d'une liste peut être de différentes formes :
Selon votre modèle de calculatrice, il y a maximum 6, 20 ou 26 listes, et un maximum de 255 ou 999 éléments. Les commandes List1 (jusque List6) sont trouvables dans le catalogue de la calculatrice - (SHIFT) + (4), permettant ainsi d'alléger le code (en effet, ces commandes pèsent 1 octet chacune).
On dispose aussi de 6 "Fichiers" de liste (voir &&File &&), donc on a, au maximum, 26×6=156 listes stockées.
N'hésitez pas à aller voir le fonctionnement des listes dans le tutoriel de programmation Basic Casio.
Toute opération mathématique est supportée par les listes : on peut dès lors utiliser les fonctions &&log && ou &&cos && sur une liste, la multiplier, l'additioner ou l'élever à une puissance avec un scalaire, ou même avec une autre liste !
Un calcul entre plusieurs listes se fait élément par élément, il faut donc que celles-ci soient de même taille (ou une Erreur dimension sera renvoyée).
Par exemple, {1,2,3}^{2,3,4} donne {1,8,81}. Il faut donc s'en rappeler pour déterminer si 2 listes sont identiques. Une telle condition peut être implémentée comme suit (voir &&Not && et &&Sum &&):
Un liste peut être initialisée de différentes façons :
Il est important à noter que l'initialisation d'une liste ne peut faire appel à des éléments d'une autre liste, d'une matrice ou encore d'un vecteur directement (voir &&Mat && et &&Vct &&). L'exemple suivant renvoie donc une Erreur syntaxe : {List 1[1], Mat A[1,3]}→List 1. Des résultats intermédiaires sont nécessaires.
On ne peut pas initialiser la List Ans de la même manière ({1,2,3}→List Ans produit une Erreur argument).
En effet, toute expression/fonction renvoyant une liste qui n'est pas stockée se retrouve dans List Ans.
On peut aussi initialiser une liste grâce à un nom unique (de 8 octets maximum - une chaîne de caractères vide est valide) : 3→Dim List "BLABLA". Si la liste "BLABLA" existe déjà, elle sera écrasée. Au contraire, si elle n'existe pas encore, une liste vide jusqu'ici sera utilisée (il n'est pas aisé de savoir à quel numéro de liste elle correspond...). Ceci renvoie une Erreur mémoire si toutes les listes sont déjà initialisées.
Ce nom est stocké à l'indice [0], et peut être changé : "ALBALB"→List 1[0] (l'indice [0] peut, dans ce cas-ci, être ommis). Si la liste était vide, elle contient maintenant la valeur 0 à l'indice [1].
Ce nom peut être affiché grâce à &&Locate &&, et peut être récupéré dans une String : List 1[0]→Str 1 (voir &&Str &&).
Pour modifier un élément ou le lire, il faut spécifier l'indice de celui-ci entre crochet après la liste (par exemple 2→List 1[5]). On ne peut accéder un élément que dans une List - et non si la liste est une expression/fonction (Seq(X,X,1,3,1)[2] renvoie une Erreur syntaxe - voir &&Seq(&&). Aussi, un élément en particulier ne peut être modifié s'il se trouve dans List Ans.
Les listes supportent l'auto-incrémentation (d'un seul élément à la fois), c'est-à-dire que si vous écrivez une valeur à d'indice 1+Dim List 1 , celle-ci sera ajoutée à votre liste, comportant maintenant un élément de plus.
Pour supprimer complètement une liste, voir &&ClrList &&.
Pour avoir accès à encore plus de listes, voir &&File &&.
Pour trier une liste dans l'ordre croissant, voir &&SortA(&&; dans l'ordre décroissant, voir &&SortD(&&.
Pour fusionner 2 listes, voir &&Augment(&&.
Pour obtenir l'élément ayant le plus grand module d'une liste, voir &&Max(&&, et le plus petit module &&Min(&&.
Pour obtenir la moyenne arithmétique d'une liste, voir &&Mean(&&.
Pour obtenir la médiane d'une liste, voir &&Median(&&.
Pour calculer la somme de tous les éléments d'une liste, voir &&Sum &&; et leur produit voir &&Prod &&.
Pour obtenir les poids des éléments d'une liste, voir &&Percent &&.
Pour obtenir les sommes cumulées d'une liste, voir &&Cuml &&.
Pour obtenir les différences d'éléments successifs d'une liste, voir &&◿List &&.
Pour obtenir une liste à partir d'une matrice, voir &&Mat→List(&&, et l'opération inverse &&List→Mat(&&.
1e chose que je pensais changer pour plus de facilité pour moi : seulement mettre le nom des fonctions intéressantes àpd de la page List (et mettre les phrases expliquatives "Pour obtenir ..." directement dans un champ de la page "Mean()" par ex).
Aussi, il est fort possible que la structure n'est pas bonne, n'hésitez pas à m'en faire part.
Enfin, peut-être faudrait-il un résumé de chaque commande en une ligne (qui serait par ex montrée lorsque l'on regarde la liste de fonctions B.C) ?
Citer : Posté le 17/09/2022 14:39 | #
Mon but est bien évidemment d'être le plus complet possible, mais des choses peuvent parfois m'échapper. C'est aussi pour ça que ça prend autant de temps : tester ce qui arrive lorsque l'on fait 3→Dim List "BLABLA" quand aucune liste n'est dispo, etc etc.
Je me disais aussi qu'une aussi grosse tartine que celle de List pouvait effrayer, mais je ne sais pas ce que je pourrais changer
Citer : Posté le 17/09/2022 15:05 | #
Oui, je pense qu'être complet est mieux. Si le bloc est intimidant alors tu peux faire une introduction, mais je pense que tout est bon à noter.
Sinon, pour répondre plus concrètement à tes préoccupations du post principal, je peux aider pour relire et faire la partie UI/site. Je sais plus si je l'ai dit mais idéalement ce serait transportable à la v5 après, donc ce que j'imagine c'est qu'on pourrait avoir le texte sur un dépôt Git (par facilité), avec les détails en Markdown de préférence, et ensuite générer le HTML avec un script.
Citer : Posté le 17/09/2022 16:19 | #
En Markdown ? Tu veux dire qu'il faudrait (par exemple) remplacer les références à d'autres fonctions "&&List &&" par "**List **" pour le mettre en gras ?
J'ai pas trop compris l'avantage du Markdown (si c'est bien ceci).
Par contre si c'est fournir une "légendeé des symboles utilisés alors ça oui, forcément
Je suis pour une page GitHub, je ne m'y connais pas sur Gitea (ou Gitea PC) donc je ferai ça sur ma propre page, non ?
Citer : Posté le 17/09/2022 16:45 | #
Le Markdown affecte surtout le formatage, ie. gras/italique/code. La raison c'est que le BBCode va disparaître quand on passera à la v5, et donc si on en écrit de grands quantités maintenant on sera embêtés pour le mettre sur le nouveau site. Alors que sur la v43 actuelle on peut déjà convertir du Markdown en HTML de façon standard.
Quand je dis Git c'est juste pour stocker les fichiers texte avec les descriptions de chaque fonction, et gérer les contributions. Moi j'imaginais améliorer/remplacer la référence Basic actuelle directement sur Planète Casio ?
Citer : Posté le 17/09/2022 17:51 | #
Oui c'est justement le but.
Compris pour le Markdown. Je suppose que c'est la même chose que Discord par ex ? * pour italique, ** pour gras, __ pour souligner, …
Ah donc tu voudrais que je fasse un fichier txt par fonction ? C'est vrai que ça pourrait être bien, et plus facile. Par conséquent on pourrait même les structurer dans des dossiers (par ex d'accès : './OPTN/LIST/Dim.txt').
Par rapport à gérer les contributions : je sais qu'il y a moyen de gére à plusieurs des repo GitHub, c'est de ça que tu veux parler ? Chacun ayant les accès pourrait modifier "ce qu'il veut".
Envore 2 remarques : beaucoup de caractères spéciaux seront utilisés - même dans les noms de commandes (faut voir si le site supporte correctement), et dans un premier temps je ne fais que la version française (qui prendra déjà des plombes haha).
Et une derbière question : je pense qu'il serait mieux de fermer les parenthèses des fonctions (écrire "SolveN()" au lieu de "SolveN(" ), et ne pas mettre l'espace qui suit ube commande comme "List " ? J'avais fait ça au début pour "rester fidèle" à la syntaxe BASIC Casio, mais ça a l'air de compliquer les choses et la lecture j'ai l'impression.
Citer : Posté le 17/09/2022 18:10 | #
Oui c'est ça, et on peut rajouter des extensions/notations dédiées si tu en a besoin.
Effectivement on peut organiser comme on veut. Perso je mettrais pas forcément par accès parce qu'il y a des fonctions accessibles par plusieurs endroits et des fonctions pas listées dans les menus du tout hors Catalogue. Mais moralement grouper par catégorie oui 100%.
Oui c'est l'idée. Idéalement on peut le faire sur Gitea, mais dans tous les cas ça revient au même.
Pas de souci tant que c'est de l'Unicode, et pas de souci pour la version française.
Note qu'il existe déjà une référence complète d'à peu près tous les opcodes, avec des infos utiles notamment comment les écrire en Unicode (le champ multi), donc n'hésite pas à partir de là.
Pour ce qui est de la classification je pense que List et SolveN tous seuls sont les mieux. Après rien ne t'empêche d'indiquer l'opcode et l'écriture exacte avec espace et parenthèse ouvrante dans la description.
Citer : Posté le 17/09/2022 18:21 | #
OK, c'est noté !
Je vais faire les modif nécessaires alors, puis me renseigner sur Gitea puis ferai mon premier git dans ~1 semaine
Je pense que ma vitesse sera 1 fonction BASIC Casio tous les 1~2 jours, assez lent mais c'est déjà ça.
Merci pour tes réactions, toi seul as finalement suffit à me remotiver haha