Définir un type expression_arithmetique permettant les entiers, les variables, les opérations unaires (oppose, racine carrée), binaires (addition, soustraction, multiplication et division). Et voici quelques exemples de constantes:
let e1 = Addition (Constante 2, Constante 2);; e1 : expression_arithmetique = Addition (Constante 2, Constante 2) let e2 = Multiplication (e1, (Racine (Variable "x")));; e2 : expression_arithmetique = Multiplication (Addition (Constante 2, Constante 2), Racine (Variable "x")) let e3 = Division (e2, Soustraction (e1, e2));; e3 : expression_arithmetique = Division (Multiplication (Addition (Constante 2, Constante 2), Racine (Variable "x")), Soustraction (Addition (Constante 2, Constante 2), Multiplication (Addition (Constante 2, Constante 2), Racine (Variable "x"))))
Calculer la hauteur d'une expression arithmétique.
Écrire une fonction évaluant une expression arithmétique dépourvue de variables et de racine carrée.
Simplifier une expression arithmétique. On implantera, par exemple, 0+x=x, 0x=0, 1x=x, -(-x)=x ...
Écrire une fonction convertissant une expression arithmétique en une liste de chaînes de caractères le représentant sous forme préfixe. Par exemple,
lineariser_arbre e3;; - : string list = ["/"; "*"; "+"; "constante"; "2"; "constante"; "2"; "sqrt"; "variable"; "x"; "-"; "+"; "constante"; "2"; "constante"; "2"; "*"; "+"; "constante"; "2"; "constante"; "2"; "sqrt"; "variable"; "x"]
Prendre le résultat d'une linéarisation et reconstruire l'arbre initial.