|
Types structurés |
||||||||||||||||||
SyntaxeTypes numériquesTypes structurésExpressionsÉvaluationProcédures |
Maple offre une grande [1] variété de structures permettant de regrouper des données élémentaires.SéquencesC'est le type structuré fondamental de Maple. On désigne par séquence toute succession de termes séparés par des " , ". La définition d'une séquence répond donc au motif suivant :
(Lui donner un nom est bien sûr facultatif.) Par exemple : s := a, b, c, 1, Pi, exp ; est une séquence correctement définie en Maple. Les données qu'elle contient sont, typiquement, hétérogènes. Le type d'un tel objet Maple est exprseq (expression sequence) [2]. Accès aux termesL'accès aux termes de séquences est des plus souples. Il s'effectue à l'aide de crochets : si s est une séquence,
Les conventions de signe précédentes peuvent être associées : ainsi s[ 3 . . -2 ] désigne la sous-séquence des termes du 3ème à l'avant-dernier. ConcaténationSi l'on sépare deux séquences par une virgule, celle-ci sera indiscernable de celles qui séparent les termes contenus dans chaque séquence. On comprend alors que la concaténation (mise bout à bout) de séquences est réalisée très simplement :
regroupe les N séquences en une seule. Il n'est plus possible de retrouver les séquences originales. On peut y voir l'explication de la "caractéristique" suivante : Affectation d'un élémentCette opération est impossible avec une séquence ! ConstructionL'instruction seq permet de former rapidement une séquence dont les termes répondent à une syntaxe régulière :Notons le raccourci x$n pour seq(x , i = 1 . . n), formant une séquence de n termes identiques. C'est utile lorsqu'on a à calculer les dérivées successives d'une expression, cf. la section correspondante. On remarque aussi le symbole NULL pour désigner la séquence vide. Elle ne produit aucun affichage... et c'est pourtant le résultat de certains calculs Maple (p. ex. la résolution d'une équation où aucune solution n'a été trouvée). Cela pourrait faire croire à tort que l'instruction n'a pas été exécutée.En effet, Maple utilise lui-même des séquences pour communiquer ses résultats dans certains cas :
Par exemple : v := (x , y) : f(v) ; est correct (les parenthèses autour de la séquence x,y ne servant qu'au groupage). Listes et ensemblesOn obtient deux nouveaux types de données importants en plaçant une séquence entre des délimiteurs convenables :
Les exemples suivants illustrent ces différences : Maple "trie" [3] automatiquement les éléments des ensembles, afin de pouvoir comparer deux d'entre eux. Fonctions communesLes fonctions suivantes peuvent être appliquées aux deux types de données. Cependant leur application aux ensembles n'est guère pertinente.
Fonctions ensemblistesLe prédicat d'appartenance se note in, l'inclusion subset, la réunion union, l'intersection intersect :Noter la syntaxe infixe particulière. Pour une notation préfixée plus habituelle en Maple, on doit inclure la commande entre deux backquotes. P. ex. : ` intersect ` (E1 , E2 , ... , En) (cf. "Évaluation"). Bien sûr, dans le cas des ensembles, nops dénote simplement le cardinal. TablesLe type table répond à la nécessité d'une structures ou les indices peuvent être quelconques. Les indices par défaut demeurent des entiers, mais on peut spécifier des indices différents : Pour connaître le contenu complet d'une table, il ne suffit pas de taper son nom suivi de "Enter". La raison réside dans les mécanismes d'évaluation de Maple. Il donc faut utiliser une commande print ou eval. On fera attention à print qui ne produit qu'un affichage (une "image") de la table, et qui ne convient donc pas si le résultat doit resservir. L'accès aux termes s'effectue comme pour les séquence et les listes. L'affectation directe est possible : table1[2] := ... mais nécessite une vigilance particulière. Les indices des tables ne faisant l'objet d'aucun contrôle, si l'on spécifie par mégarde un indice absent de la table, il lui sera simplement ajouté. La copie de tables obéit à des règles particulières. Une table étant typiquement une structure volumineuse, Maple s'efforce de limiter le nombre d'exemplaire en mémoire. Une instruction comme t2 := t1 ne dupliquera donc pas la table t1, mais créera en fait un pointeur (un alias) pour désigner les mêmes données en mémoire : On voit donc que pour créer une copie indépendante, l'instruction copy est indispensable. Maple utilise lui-même des tables pour les valeurs particulières des fonctions ou des procédures, cf. la section correspondante. TableauxLe type tableau (array) est un cas particulier du type table. Les tableaux sont des tables indexées par un (ou plusieurs) entier(s) décrivant un (ou plusieurs) intervalle(s) [5]. La construction de tableaux s'effectue avec l'instruction array
En voici deux exemples : Les options d'initialisation seront surtout utiles en algèbre linéaire :
On obtient certes un message d'erreur, mais c'est mieux que rien. Les tableaux étant des tables particulières, ils sont soumis aux mêmes règles concernant la copie. Notes[1] Qui a dit "trop grande" ? [2] Une des abréviations dont Maple a le secret -- et un bon exercice de prononciation. [3] Attention, l'ordre choisi par Maple n'est pas nécessairement l'ordre mathématique. [4] Attention, le résultat n'est pas affecté à L. C'est une nouvelle liste qui est produite, que l'on peut nommer à nouveau L ou autrement. [5] Si tous les indices commencent à la valeur 1, le tableau est du type matrix (d'usage fréquent en algèbre linéaire). |