Cours Apl 04 :
Premières fonctions primitives et manipulations d'objets |
|
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 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
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 † Mat1 donne 1
2 3
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 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 4†Mnum2
- additionnez Mnum1 avec les 3 dernières lignes et les 4 dernières colonnes de Mnum2 Mnum1+¯3 ¯4†Mnum2
- additionnez Mnum1 avec les 3 premières lignes et les 4 dernières colonnes de Mnum2 Mnum1+3 ¯4†Mnum2
- additionnez Mnum1 avec les 3 dernières lignes et les 4 premières colonnes de Mnum2 Mnum1+¯3 4†Mnum2
4. Affichez la taille de Mnum1, puis celle de Mnum2. ½Mnum1 ½Mnum2
5. Affichez le premier chiffre en haut à gauche de Mnum1 1 1†Mnum1
6. Affichez le dernier chiffre en bas à droite de Mnum1 ¯1 ¯1†Mnum1
7. Affichez la somme des chiffres de la première et de la dernière colonne de Mnum2 (4 1†Mnum2)+4 ¯1†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. 3½(1 1†Mnum1)+¯1 ¯1†Mnum2
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 |
|