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