### 6.14.2 Pour évaluer une expression : `eval`

`eval` sert à évaluer une expression.
`eval` a un ou deux argument(s) : une expression et éventuellement le niveau souhaité de l’évaluation.
Il faut savoir que `Xcas` évalue toujours les expressions, sans avoir besoin de la commande `eval` : le niveau d’évaluation est indiqué dans la case `eval` de la `Configuration du CAS` du menu `Cfg` et vaut par défaut vaut 25.
La commande `eval` est surtout utile lorsqu’on veut évaluer une sous-expression dans l’éditeur d’expressions.
On tape :

`a:=2`

On obtient :

`2`

On tape :

`eval(2+3*a)`

ou

`2+3*a`

On obtient :

`8`

On tape :

`purge(r);purge(p);a:=1+i*r`
`r:=p+1;p:=-4;`

on peut alors avoir différentes évaluation de `a` selon le niveau dévaluation demandé :

- on tape :
  `a`
  On obtient :
  `1-3*i`
- on tape :
  `eval(a,1)`
  On obtient :
  `1+(i)*r`
- on tape :
  `eval(a,2)`
  On obtient :
  `1+(i)*(p+1)`
- on tape :
  `eval(a,3)`
  On obtient :
  `1-3*i`

Remarque
Pour les objets géométriques, en plus de l’évaluation exacte (au niveau 25 par dévaut), `Xcas` rajoute une évaluation numérique (au niveau 1) au moment de l’affichage pour pouvoir représenter les objets géométriques dependant de paramètres définis par `assume` ou par une affectation numérique.

Voici différents exemples :

- On tape :

      purge(r);
      R:=point(1+i*r);
      r:=-3;

  Le niveau correspondant à `R:=point(1+i*r);` affichera dans tous les cas le point et sa légende car l’évaluation numérique pour l’affichage de ce niveau est faite au moment de l’affichage donc après que `r` ait été défini.
- On tape :

      purge(r);
      purge(p);
      R:=point(1+i*r);
      r:=p+1;
      p:=-4;

  Le point `R` n’apparait pas car l’évaluation numérique au moment de l’affichage n’est faite qu’au niveau 1. Ainsi `r` est remplacé par `p` mais `p` n’est pas remplacé donc la commande `R:=point(1+i*r);` n’affiche rien.
- On tape

      purge(r);
      R:=point(1+i*r):;
      r:=-3;
      eval(R,1);

  La commande `eval(R,1)` renvoie `point(1+(i)*r)` et dessine le point `R` et sa légende. En effet la réponse est évaluée formellement au niveau 1 ce qui donne la réponse `point(1+i*r)` puis pour la représentation graphique, `point(1+i*r)` est évalué numériquement (sans toucher aux légendes) ce qui permet d’afficher le point. La légende n’ apparait pas, lorsqu’on évalue un objet géométrique, mais ici, lorsqu’on fait `eval(R,1)`, `R` est évalué en un objet géométrique, mais l’objet géométrique lui-même n’est pas évalué. Donc `eval(R,1)` dessine le point `R` et sa légende.
- On tape

      purge(r);
      purge(p);
      R:=point(1+i*r):;
      r:=p+1;
      p:=-4;
      eval(R,1);

  La commande `eval(R,1)` renvoie `point(1+(i)*r)`, mais ne dessine pas le point `R`. En effet la réponse est évaluée formellement au niveau 1 ce qui donne la réponse `point(1+i*r)` puis pour la représentation graphique, `point(1+i*r)` est évalué numériquement au niveau 1 ce qui ne permet pas d’afficher le point.
- On tape :

      purge(r);
      R:=point(1+i*r):;
      r:=-3;
      eval(R,2);

  La commande `eval(R,2)` renvoie `point(1,-3)` et le dessin du point `R` sans sa légende. En effet, quand on fait `eval(R,2)`, alors `R` est évalué en un objet géométrique, et cet l’objet géométrique est lui-même évalué et donc la légende disparait.
- On tape :

      purge(r);
      purge(p);
      R:=point(1+i*r):;
      r:=p+1;
      p:=-4;
      eval(R,2);

  La commande `eval(R,2)` renvoie `point(1,p+1)` et le dessin du point `R` sans sa légende. En effet, quand on fait `eval(R,2)`, alors `R` est évalué en un objet géométrique, et cet l’objet géométrique est lui-même évalué et donc la légende disparait.