### 2.5.2 L’affectation : `:= => sto Store`

On peut utiliser les fonctions infixées `:=` comme en Pascal ou `=>` comme le "sto" des calculatrices pour réaliser une affectation ou encore,
les fonctions préfixées, `sto` ou `Store`, d’arguments la valeur à affecter et le nom d’une variable.
`:=` (ou `=>` ou `sto` ou `Store`) permet d’affecter une variable.
On tape (attention à l’ordre des arguments !) :

`a:=4`

ou

`4=>a`

ou

`sto(4,a)`

ou

`Store(4,a)`

On obtient :

`4`

`:=` ou `=>` permettent aussi de définir des fonctions.
On tape :

`f(x):=sin(x)/x`

ou

`sin(x)/x=>f(x)`

ou encore

`f:=x->sin(x)/x`

ou

`x->sin(x)/x=>f`

On peut aussi définir une fonction par morceaux :

- une fonction définie par 2 valeurs,
  par exemple, pour définir la fonction g qui vaut 1 si x>0 et -1 si x≤ 0 on tape : On tape :
  `g(x):=ifte(x>0,1,-1)`
  ce qui est équivalent à :
  `g(x):=if x>0 then 1; else -1; end_if`
  On tape (voir plus loin la différence avec `ifte`) :
  `g(x):=when(x>0,1,-1)`
  ou
  `g(x):=quand(x>0,1,-1)`
  ou
  `g(x):=IFTE(x>0,1,-1)`
  ou
  `g(x):=x>0?1:-1`
  En effet `ifte` (ou `when` ou `quand` ou `IFTE`) a trois arguments : une condition et deux expressions et `?` est infixé avec la condition à gauche et à droite on met les deux expressions séparées par `:`.
  Si la condition est vraie, `ifte` (ou `when` ou `quand` ou `IFTE` ou `?`) renvoie la première expression et sinon `ifte` (ou `when` ou `quand` ou `IFTE` ou `?`) renvoie la deuxième expression.

  Remarque
  La condition x != a peut être remplacée par le rèel r=x−a :
  si r==0 la condition est fausse et sinon elle est vraie.
  On tape pour définir la fonction qui vaut partout 0 sauf en 1 où elle vaut 1 :

  `h(x):=when(x-1,0,1)`

  est équivalent à :

  `h(x):=when(x!=1,0,1)`

  Remarque : Différence entre `ifte` et les autres `when....`
  On tape : `f(x):=ifte(x>0,1,0);`
  `g(x):=when(x>0,1,0)` ou `g(x):=quand(x>0,1,0)`
  puis on tape `f(x)`
  on obtient :
  Ifte: Unable to check test Error: Bad Argument Value
  ici `x` n’a pas de valeur : avec `ifte` ou `if then else end_if` il faut que la variable `x` soit affectée pour pouvoir tester la condition (quand on définit une fonction ce qui suit le := n’est pas évalué donc la définition de `f(x)` ne pose pas de problème).
  Pour la définition de g avec `when....`, la variable `x` n’a pas besoin dêtre affectée.
  On tape `g(x)`
  on obtient :
  `((x>0)? 1 : -1)`
  car `?` est la version infixée de `when`.

- une fonction définie par n valeurs,
  par exemple, pour définir la fonction g qui vaut -1 si x<−1, 0 si −1≤ x≤ 1 et 1 si x>1, on tape :
  `g(x):=piecewise(x<-1,-1,x<=1,0,1)`
  `piecewise` utilise des paires condition/valeur ou valeur est renvoyée si sa condition est vraie ce qui implique que les conditions précédentes sont fausses. Si le nombre d’arguments est impair, la dernière valeur est la valeur par défaut (comme dans un `switch`).
  `piecewise` est la généralisation de `when`.
  Pour définir la fonction f qui vaut -2 si x<−2, 3x+4 si −2≤ x <−1, 1 si −1 ≤ x<0 et x+1 si x ≥ 0, on tape :
  `f(x):=piecewise(x<-2,-2,x<-1,3x+4,x<0,1,x+1)`
  On peut alors faire le graphe de f en tapant :
  `plotfunc(f(x))`