### 6.41.34 Appliquer une fonction d’une variable aux éléments d’une liste : `map apply of`

`map` ou `apply` ou `of` sert à appliquer une fonction aux éléments d’une liste. Mais ces trois instructions ne sont pas des synonymes. On a :

- `of` a 2 paramètres une fonction `f` et une expression `E` ou une liste `L`. `of(f,E)` renvoie `f(E)` et `of(f,L)` renvoie `f(L)`. En effet, `of` est la traduction interne des parenthèses : `f(x)` est traduit en interne par `of(f,x)`. On peut donc utiliser directement `f(x)`,
- `apply` a 2 paramètres une fonction `f` et une liste `L`. `apply(f,L)` renvoie `[f(L[0]),f(L[1]),...f(L[size(L)-1])]`.
  Attention
  `apply` rèpond `[]` si le deuxième élément n’est pas une liste.
- `map` a 2 paramètres une expression `E` ou une liste `L` et une fonction `f`.
  `map(E,f)` renvoie `f(E)` et
  `map(L,f)` renvoie `[f(L[0]),f(L[1]),...f(L[size(L)-1])]`.
  Attention à l’ordre des paramètres qui n’est pas le même pour `map` et pour `apply` , c’est pour des raisons de compatibilité!!!.
  Lorsque la liste est une matrice et que la fonction doit s’appliquer à chaque élément d’une matrice il faut mettre `matrix` comme argument optionnel à `map`

On tape :

`apply(x->x+1,[3,5,1])`

ou

`map([3,5,1],x->x+1)`

cela ajoute 1 à chaque élément de la liste et on obtient :

`[4,6,2]`

On tape

`of(x->x+1,[3,5,1])`

et puisque `[3,5,1]+1=[3,5,2]`, on obtient :

`[3,5,2]`

Exemple avec une matrice
On tape :

`apply(x->x+1,[[3,5,1],[3,5,1],[3,5,1]])`

ou

`map([[3,5,1],[3,5,1],[3,5,1]],x->x+1)`

cela ajoute 1 à chaque élément de la liste c’est à dire à chaque ligne de la matrice et comme `[3,5,1]+1=[3,5,2]`, on obtient :

`[[3,5,2],[3,5,2],[3,5,2]]`

On tape :

`of(x->x+1,[[3,5,1],[3,5,1],[3,5,1]])`

cela ajoute 1 c’est à dire la matrice identité à la matrice et on obtient :

`[[4,5,1],[3,6,1],[3,5,2]]`

On tape :

`map([[3,5,1],[3,5,1],[3,5,1]],x->x+1,matrix)`

cela ajoute 1 à chaque élément de la matrice et on obtient :

`[[4,6,2],[4,6,2],[4,6,2]]`

Autres exemples On tape :

`apply(x->x```^```2,[3,5,1])`

ou

`of(x->x```^```2,[3,5,1])`

ou

`map([3,5,1],x->x```^```2)`

ou on définit la fonction h(x)=x2 en tapant :

`h(x):=x```^```2`

puis

`apply(h,[3,5,1])`

ou

`of(h,[3,5,1])`

ou

`map([3,5,1],h)`

On obtient :

`[9,25,1]`

On tape :

`apply(h,[[3,5,1],[3,5,1],[3,5,1]])`

ou

`map([[3,5,1],[3,5,1],[3,5,1]],h)`

ou

`map([[3,5,1],[3,5,1],[3,5,1]],h,matrix)`

On obtient chaque èlement au carré :

`[[9,25,1],[9,25,1],[9,25,1]]`

On tape :

`of(h,[[3,5,1],[3,5,1],[3,5,1]])`

On obtient le carré de la matrice :

`[[27,45,9],[27,45,9],[27,45,9]]`

On définit la fonction g(x)=[x,x2,x3] en tapant :

`g(x):=[x,x```^```2,x```^```3]`

ou

`g:=(x)->[x,x```^```2,x```^```3]`

puis, on tape :

`apply(g,[3,5,1])`

ou

`map([3,5,1],g)`

On fait agir g sur 3, puis sur 5, puis sur 1 et on obtient :

`[[3,9,27],[5,25,125],[1,1,1]]`

On tape :

`of(g,[3,5,1])`

On fait agir g sur la liste [3,5,1] et on obtient :

`[[3,5,1],[9,25,1],[27,125,1]]`

Remarque
Si `l1,l2,l3` sont des listes :
`sizes([l1,l2,l3])=map(size,[l1,l2,l3])`