Les données
Les entités sont les objets de base (constantes et variables) d'Algae. Elles contiennent des membres et des éléments. Les membres contiennent des informations sur l'entité, comme le nombre de lignes d'une matrice. Les éléments d'une entité, s'il en existe, contiennent des données telles que la valeur d'un scalaire. Il existe cinq classes :
Classes | Description | |
---|---|---|
`scalar' | La structure de données « scalaire » contient un seul élément, sa valeur, qui peut avoir l'un des types de données décrits ci-dessus. Ses membres sont : | |
Membre | Description | |
`class' | La chaîne de caractères «scalaire». | |
`type' | Le type (comme «integer» ou «real»). | |
Notez qu'un scalaire n'est pas la même chose qu'un vecteur ou une matrice à un élément. | ||
`vector' | L'entité «vecteur» contient un tableau unidimensionnel d'éléments. Ses membres sont : | |
Membre | Description | |
`class' | La chaîne de caractères `"vector"'. | |
`type' | Le type (comme `"integer"' or `"real"'). | |
`density' | Soit «dense» soit «sparse». | |
`ne' | Le nombre d'éléments. | |
`nn' | Le nombre d'éléments non zéros. | |
`eid' | Les étiquettes des éléments. | |
Les étiquettes des éléments d'un vecteur sont elles-mêmes un vecteur. | ||
`matrix' | La structure de données « matrice » contient des tableaux bidimensionnels d'éléments. Elle contient zéro ou plusieurs lignes et colonnes. Les membres d'une matrice sont : | |
Membre | Description | |
`class' | La chaîne de caractères `"matrix"'. | |
`type' | Le type (comme `"integer"' ou `"real"'). | |
`symmetry' | L'un des termes `"general"', `"symmetric"', ou `"hermitian"'. | |
`density' | L'un des termes `"dense"', `"sparse"' ou `"sparse_upper"'. | |
`nr' | Le nombre de lignes. | |
`nc' | Le nombre de colonnes. | |
`nn' | Le nombre d'éléments non zéros. Pour les matrices avec une densité «sparse_upper», ce nombre n'inclut pas les éléments sur la diagonale, étant tous entreposés. | |
`rid' | Les étiquettes des lignes. | |
`cid' | Les étiquettes des colonnes. | |
Les étiquettes des lignes et des colonnes d'une matrice sont des vecteurs. Le vecteur d'étiquettes de lignes comporte le même nombre d'éléments que sa matrice comporte de lignes, et il en va de même pour l'étiquette des colonnes. | ||
`table' | L'objet `table' est comme un compartiment pouvant contenir n'importe quel nombre d'autres objets. Plusieurs fonctions renvoient des tables. Par exemple, la fonction eig renvoie une table qui contient les valeurs des matrices et des vecteurs. Les entités contenues dans une table en sont membres, elles peuvent donc être extraites à l'aide de l'opérateur . Ainsi, eig(A).values ??renvoie les valeurs propres de `A'. | |
`function' | Les fonctions sont des entités comme les scalaires et les matrices, et peuvent être utilisées de la même manière. Les fonctions ont deux membres : «class», étant «function», et «ilk», étant soit «user», soit «builtin». |
Les classes scalaire, vectorielle et matricielle sont connues collectivement sous le nom de tableaux. Ce sont les seules classes continuant des éléments, et toutes ont le type de membre spécifiant le type de données. Il existe quatre types :
Type | Description |
---|---|
`integer' | Sur la plupart des machines, il s'agit d'un entier 32 bits, comme 42 ou -273. |
`real' | Il s'agit d'un nombre à virgule flottante comme 3,1415. Il est entreposé en 64 bits sur la plupart des machines. |
`complex' | Il s'agit d'un nombre complexe comportant à la fois des parties réelles et imaginaires. |
`character' | Il s'agit d'une chaîne de caractères telle que «Bonjour». |
Les constantes scalaires sont spécifiées de manière similaire à celle utilisée dans d'autres langages de programmation. Les constantes numériques peuvent être données sous forme décimale, comme «32» ou «32,0», ou sous forme de notation scientifique, comme «3,2E1». Dans cette dernière notation, les lettres «e» et «E» peuvent être utilisées de manière interchangeable pour préfixer l'exposant. Les espaces blancs (espace, tabulation,...) sont bien sûr importants dans ce contexte, de sorte que « 1,2e+3 » (1200,0) n'est certainement pas la même chose que « 1,2e +3 » (4,2).
Une constante `character' est une séquence d'un ou plusieurs caractères entourés de guillemets doubles correspondants. Dans les guillemets, le caractère barre oblique inverse peut être utilisé pour introduire des «séquences d'échappement» pour les caractères inhabituels comme la nouvelle ligne. Par exemple, la chaîne de caractères `"\""' est une chaîne de caractères contenant un seul caractère (le guillemet double droit). Les séquences d'échappement suivantes peuvent être utilisées :
Séquence d'échappement | Description |
---|---|
\a | Signal sonore "bip" |
\b | Retour arrière |
\e | Échappement |
\f | Saut de page |
\n | Nouvelle ligne |
\r | Retour chariot |
\t | Tabulation |
\v | Tabulation verticale |
\ooo | Nombre octal |
\xhh | Nombre hexadécimal |
La séquence d'échappement \ooo se compose d'une barre oblique inverse suivie d'un, deux ou trois chiffres octaux, étant utilisés pour spécifier la valeur du caractère souhaité. Par exemple, \33 est le caractère d'échappement ASCII (qui est également donné par \e). De même, la séquence \xhh se compose d'une barre oblique inverse suivie de « x », suivi d'un ou deux chiffres hexadécimaux, qui spécifient la valeur du caractère souhaité. Par exemple, \x1b spécifie également le caractère d'échappement ASCII.
Si le caractère suivant la barre oblique inverse n'est pas l'un de ceux spécifiés ci-dessus, alors ce caractère est pris au sens littéral. Par exemple, \" spécifie le caractère guillemet double, et non la fin de la constante de caractère.
Les matrices peuvent être générées en spécifiant leurs éléments entre parenthèses. Les virgules séparent les éléments dans les lignes et les points-virgules séparent les lignes. Ainsi, [1,2;3,4] spécifie la matrice :
[ 1 2 ][ 3 4 ]
Un vecteur peut être généré en utilisant l'une des formes «i:j» ou «i:j:k». Il est obtenu en commençant par la valeur «i» et en incrémentant de «k» (ou de 1 si la première forme est utilisée) tout en restant entre «i» et «j», inclus. (Notez que ce n'est pas le même format utilisé par MATLAB.) Par exemple, [1:8:2] est identique à [1,3,5,7]. Tous les éléments d'une matrice ont le même type (`integer', `real',...); la conversion sera effectuée automatiquement si possible.
Les termes entre parenthèses peuvent être des constantes, des variables ou des expressions. Par exemple, [1+2,3] est identique à [3,3]. Des matrices peuvent être impliquées, à condition que leurs dimensions soient appropriées. Par exemple, si la variable «A» est définie comme étant égale à la matrice carrée «[1,2 ; 3,4]», une nouvelle colonne pourrait lui être ajoutée avec l'expression [A,[5 ; 6]] pour obtenir :
[ 1 2 5 ][ 3 4 6 ]
Les matrices peuvent être partitionnées en spécifiant les numéros de ligne et de colonne souhaités entre parenthèses. Par exemple, si «A» est une matrice précédemment définie, alors A[1;1] spécifie un scalaire ayant la valeur de l'élément de la première ligne et de la première colonne de «A». Le point-virgule entre parenthèses sépare les spécificateurs de ligne des spécificateurs de colonne.
Les membres des structures de données sont référencés à l'aide de l'opérateur membre «.». Par exemple, le nombre de lignes d'une matrice est entreposé dans le membre nr, donc A.nr renvoie le nombre de lignes de la matrice A. L'opérateur membre associe la gauche à la droite, de sorte que A.type.type renvoie la chaîne de caractères «character».