Cours Apl 04 : Premières fonctions primitives et manipulations d'objets
 

   


L'affectation :

Cette fonction permet d'affecter la valeur de l'argument droit à l'objet de gauche.

Exemple : pour donner la valeur 35 à la variable dpt on procède comme suit :

dpt 35

L'affectation étant une fonction comme les autres, on peut la placer où bon nous semble, et plusieurs fois si nécessaire, sur la même ligne.

Exemple :

total +/liste 2 3 5

 

Attention !!!

Si plusieurs instructions sont placées sur la même ligne, apl commence par effectuer le groupe le plus à droite, puis en passe le résultat à la fonction immédiatement à sa gauche.

Dans ce cas, Apl a

- d'abord affecté 2 3 5 à liste

- puis il en a calculé la somme "+/"

- enfin, " " l'a affectée à total.

 

De même, il est courant d'initialiser plusieurs variables en une ligne.

Ainsi au lieu d'écrire :

v1 0

v2 0

v3 0

 

on écrira :

v1 v2 v3 0

 

 

Affectation en modification

Cette syntaxe est utilisée lorsqu'on réaffecte à une variable son contenu modifié.

Variable fonction  argument

 

Exemple : au lieu d'écrire a a × 2

on peut écrire a × 2

ce qui signifie : a reçoit lui même multiplié par 2.

 

 

Tailles et dimensions des variables

Comme nous l'avons déjà aperçu au chapitre 3, la principale fonction de gestion des tailles est le ½(rhô).

En mode monadique, elle rend la taille de l'objet, ou plus exactement le vecteur de ses dimensions.

Par exemple : ½ 'coucou'

rend 6, qui est un vecteur de 1 élément.

Ainsi, ½½ 'coucou'

rendra 1

Il est donc très facile de savoir quel type d'objet on manipule (scalaire, vecteur, matrice , ...).

 

En mode dyadique, la fonction ½ rend un objet dont la dimension est définie à gauche, et dont le contenu est défini à droite.

Exemple : 2 3 ½ 1 2 3 4 5 6

rend cette matrice numérique :

1 2 3

4 5 6

 

Affectons cette expression à m1 :

m1 2 3 ½ 1 2 3 4 5 6

 

D'après vous, quel sera le résultat de

 (½ m1)½ 0

 

On obtient une nouvelle matrice de même taille que m1 remplie de 0.

Pour constituer l'objet de dimension G (argument gauche), boucle sur D pour remplir le nouvel objet.

 

Ainsi, pour constituer cette matrice :

abcd
abcd
abcd

il suffit d'écrire : 3 4 ½ 'abcd'

 

Si le rhô permet d'allonger les objets, il permet également de les raccourcir.

Ainsi

         3 ½ 1 2 3 4 5 donne

1 2 3

 

Fonctions voisines : take et drop

Le (take) peut également augmenter ou diminuer les tailles des objets mais ne peut pas modifier leur nombre de dimensions.

Par exemple

2 3 ½ 4 5 6    produit cette matrice :

4 5 6
4 5 6

 

En revanche

2 3 4 5 6    produira un "Rank Error". En effet, 4 5 6 est un vecteur (objet de rang 1) et 2 3 indique les dimensions d'une matrice. Or, take ne peut pas changer le rang d'un objet, mais seulement ses dimensions, sans en changer le nombre.

Soit     Mat1 4 4 ½ 1 2 3

Mat vaut :

1 2 3 1
2 3 1 2
3 1 2 3
1 2 3 1

2 3 Mat1 donne

1 2 3
2 3 1

 

Dans cet exemple, on ne garde que les 2 premières lignes et les 3 premières colonnes de Mat1.

Si on signe négativement l'argument gauche, take prend alors les n derniers éléments.

Exemple :

         ¯3 1 2 3 4 5 rend

3 4 5

 

(Drop), quant à lui, abandonne le nombre d'élément indiqué à gauche.

Par exemple

         1 1 Mat1    rend :

3 1 2
1 2 3
2 3 1

on a abandonné la 1ère ligne et la 1ère colonne.

On obtiendrait le même résultat avec

-3 -3 Mat1


Travaux pratiques :

 

0. Chargez votre Ws de travaux pratiques :

)load c:\Mes documents\pratique-apl

 

1. Affichez le vecteur Monvec créé précédemment.

A partir de Monvec et en utilisant la fonction ½ affichez cette suite de nombres : 10 20 30 40 10 20 30 40

 

2. Affichez une matrice de 4 lignes et 6 colonnes constituée à partir des éléments de Monvec.

Recommencez en affectant le résultat à Mnum2.

 

3. Additionnez Mnum1 et Mnum2.

Pourquoi cela ne fonctionne-t-il pas ?

Additionnez Mnum1 avec les 3 premières lignes et les 4 premières colonnes de Mnum2.

- additionnez Mnum1 avec les 3 dernières  lignes et les 4 dernières  colonnes de Mnum2

- additionnez Mnum1 avec les 3 premières lignes et les 4 dernières  colonnes de Mnum2

- additionnez Mnum1 avec les 3 dernières  lignes et les 4 premières colonnes de Mnum2

 

4. Affichez la taille de Mnum1, puis celle de Mnum2.

 

5. Affichez le premier chiffre en haut à gauche de Mnum1

 

6. Affichez le dernier chiffre en bas à droite de Mnum1

 

7. Affichez la somme des chiffres de la première et de la dernière colonne de Mnum2

 

8. Affichez un vecteur de 3 éléments (3 chiffres identiques) à partir de la somme du premier élément de Mnum1 et du dernier de Mnum2.

 

9. Sans saisir aucun 0, affichez cette suite de nombres : 4 5 0 0 0

 

10. Comme pour le point précédent, affichez 0 0 0 4 5

 

11. Sauvez votre travail :

)save


Solutions :

 

1. Affichez le vecteur Monvec créé précédemment.

         Monvec

 

A partir de Monvec et en utilisant la fonction ½ affichez cette suite de nombres : 10 20 30 40 10 20 30 40

         8 ½ Monvec

ou

         (2x ½ Monvec) ½Monvec

 

 

2. Affichez une matrice de 4 lignes et 6 colonnes constituée à partir des éléments de Monvec.

         4 6 ½ Monvec

 

Recommencez en affectant le résultat à Mnum2.

         Mnum2 4 6 ½ Monvec

 

 

3. Additionnez Mnum1 et Mnum2.

         Mnum1 + Mnum2

LENGTH ERROR

 

Pourquoi cela ne fonctionne-t-il pas ?

Parce que ces 2 objets n'ont pas la même dimension, ce qui est une condition indispensable pour en additionner les éléments.

 

Additionnez Mnum1 avec les 3 premières lignes et les 4 premières colonnes de Mnum2.

         Mnum1+3 4Mnum2

 

- additionnez Mnum1 avec les 3 dernières  lignes et les 4 dernières  colonnes de Mnum2

         Mnum1+¯3 ¯4Mnum2

 

- additionnez Mnum1 avec les 3 premières lignes et les 4 dernières  colonnes de Mnum2

         Mnum1+3 ¯4Mnum2

 

- additionnez Mnum1 avec les 3 dernières  lignes et les 4 premières colonnes de Mnum2

         Mnum1+¯3 4Mnum2

 

4. Affichez la taille de Mnum1, puis celle de Mnum2.

         ½Mnum1

         ½Mnum2

 

5. Affichez le premier chiffre en haut à gauche de Mnum1

         1 1Mnum1

 

6. Affichez le dernier chiffre en bas à droite de Mnum1

         ¯1 ¯1Mnum1

  

7. Affichez la somme des chiffres de la première et de la dernière colonne de Mnum2

         (4 1Mnum2)+4 ¯1Mnum2

 

8. Affichez un vecteur de 3 éléments (3 chiffres identiques) à partir de la somme du premier élément de Mnum1 et du dernier de Mnum2.

         3½(1 1Mnum1)+¯1 ¯1Mnum2

  

9. Sans saisir aucun 0, affichez cette suite de nombres : 4 5 0 0 0

         5 4 5

 

10. Comme pour le point précédent, affichez 0 0 0 4 5

         ¯5 4 5