### 6.42.37 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]

Remarque
seq(expression,variable,liste) équivaut à :
map(liste,unapply(expression,variable)).
On tape :

seq(x+1,x,[3,5,1])

ou en utilisant unapply pour définir une fonction à partir d’une expression

map([3,5,1],unapply(x+1,x))

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])