### 6.18.6 Definir une fonction avec l’historique : `as_function_of`

Si on a affecté une valeur à la variable `a` et si on définit ensuite, dans une autre ligne d’entrée, la variable `b`, à partir de `a`, on utilise `c:=as_function_of(b,a)` pour définir une fonction `c` vérifiant : `c(a)=b`.
On tape :

`a:=sin(x)`

On obtient :

`sin(x)`

On tape :

`b:=sqrt(1+a```^```2)`

On obtient :

`b:=sqrt(1+sin(x)```^```2)`

On tape :

`c:=as_function_of(b,a)`
`c(x)`

On obtient :

`sqrt(1+x```^```2)`

On tape :

`a:=2`
`b:=1+a```^```2`

On obtient :

`b:=5`

On tape :

`c:=as_function_of(b,a)`

On obtient :

`(a)->
{ local NULL;
return(sqrt(1+a```^```2));
}`

On tape :

`c(x)`

On obtient :

`1+x```^```2`

Attention
Si la variable `b` a été affectée plusieurs fois c’est la première affectation de `b` après la dernière affectation de `a` qui compte.
On tape par exemple :
`a:=2` puis
`b:=2*a+1` puis
`b:=3*a+2` puis
`c:=as_function_of(b,a)`
On obtient :

`(a)-> {local NULL; return(2*a+1);}`

c’est à dire que `c(x)` vaut `2*x+1`.
Mais si on tape par exemple :
`a:=2` puis
`b:=2*a+1` puis
`a:=2` puis
`b:=3*a+2` puis
`c:=as_function_of(b,a)`
On obtient :

`(a)-> {local NULL; return(3*a+2);}`

c’est à dire que `c(x)` vaut `3*x+2`.
Il est donc préférable de valider la ligne ou se trouve `a` avant de définir le `b` qui convient.