Tu oublies le champ 'size'.
>00 : Vide (Detruit). <-> NOTHING_TAG
>01 : Vrai. (0 arg). <-> TRUE_TAG
>02 : Faux. (0 arg). <-> FALSE_TAG
>04 : Entier positif (...) <-> POSINT_TAG
>05 : Entier negatif (...) <-> NEGINT_TAG
>06 : Reel (Variable ?) <-> FLOAT_TAG
>08 : Variable (Var Name) <-> VAR_NAME_TAG
>09 : Var X <-> VAR_X_TAG
>10 : Var Y <-> VAR_Y_TAG
>12 : Rationnel <-> POSFRAC_TAG, NEGFRAC_TAG
>13 : Complexe <-> COMPLEX_TAG
>14 : List (Liste d'arg variable). <-> LIST_TAG
>15 : Matrice (Liste d'arg variable). FIXME: Ou LIST/LIST <-> liste de listes comme proposé en "FIXME"
>20 : = (2 args) <-> EQ_TAG
>21 : != (2 args) <-> NE_TAG
>22 : <= (2 args) <-> LE_TAG
>23 : < (2 args) <-> LT_TAG
>24 : >= (2 args) <-> GE_TAG
>25 : > (2 args) (PpHd, j'ai corrigé une erreur là) <-> GT_TAG
>26 : appartient (2 args dont le second est une liste ou une matrice ou une expression compose de AND/OR/>/etc) FIXME: Utile ? -> réponse: non.
>27 : AND (2 args) <-> AND_TAG
>28 : OR (2 args) <-> OR_TAG
>29 : XOR (2 args) <-> XOR_TAG
>30 : NOT (1 arg) <-> NOT_TAG
Je ne vais pas changer cela pour faire joli. C'est correct.
>36 : Addition (List d'arg variable). <-> ADD_TAG. Et pourquoi une liste d'arguments variable? L'addition est un opérateur binaire à la base.
>38 : Multiplication (List d'arg variable). <-> MUL_TAG, et même remarque que pour l'addition.
1. Parce que c'est un opérateur commutatif.
2. Mapple fait aussi du variable.
3. C'est plus rapide, et plus efficace.
>37 : Scal (A * x avec A purement numérique, x symbolique : 2 args). <-> MUL_TAG (pas besoin de tag particulier, et puis c'est illogique: 5*3 -> tag 38, 5*x -> tag 37, y*x -> tag 38 ???)
Si !
* multiplier et . (scalaire) sont sensiblement différents.
Cela permet de gérer simplement et efficacement 2x-x=x.
>40 : modulo x % N (2 args) <-> MOD_TAG. Et un parseur compatible AMS ne devra pas traîter % comme
mod parce que le % signifie autre chose (division par 100).
Ce n'est pas un gros problème.
>76 : Integrate (arg, variable, xstart, xend). 4 args. <-> INTEGRATE_TAG
>77 : Integrate (arg, variable, xnul). 3 args. <-> INTEGRATE_TAG (pas besoin de tag différent, il suffit de vérifier le nombre d'arguments présent avant END_TAG)
C'est + rapide et simple de ne pas vérifier. Mais ca peut se discuter.
>Et tu as oublié Integrate (arg, variable).
Non
Regarde dérivée un peu mieux.
>78 : Derivee (arg, variable, number) (Si number < 0, c'est une primitive). 3 args. <-> DIFFERENTIATE_TAG
Et tu as oublié Derivee (arg, variable).
Non. Derivee(arg, variable, 1)
>96 : Fonction externe : (Liste d'arg variable). 1er arg est un nom de variable. (FIXME: Est-ce une bonne idee ?) <-> USERFUNC_TAG
IDEE: Fonction reciproque ont le nom qui se termine par '-1' ? -> mauvaise idée. Je ne connais aucun CAS qui utilise ça.
Pourquoi pas ? Des explications ?
>Attention: si tous les arguments d'entrees sont constants, on suppose que la fonction renvoit une valeur numérique. (FIXME bien ?) -> non.
Des exemples de fonctions dont toutes les entrees sont numériques et dont la sortie n'est pas numérique ?
>Bref, à part des détails, pour lesquels je juge le choix de PpHd moins judicieux que celui de AMS,
Lesquels ?
>les 2 formats reviennent exactement au même en termes d'expressivité,
Forcément. Un CAS permet a peu près la même chose.
>donc je ne vois pas du tout l'intérêt de se compliquer la vie à spécifier un format incompatible quand on peut avoir la compatibilité tout aussi simplement et sans se fatiguer à développer une spécification de format.
Tu oublies toutes les fonctionnalités internes. Es...