Array (tableau)
  Le premier langage d'intelligence artificielle, Lisp, était entièrement basé sur le traitement de listes dynamiques. Ceci montre que les listes sont une structure essentielle en programmation, bien qu'elles aient été oubliées dans les langages classiques les plus répandus..
 Toutes les fonctions de liste sont implémentées en Scriptol, sous forme de structures associatives, et deux types de listes sont distinguées:
- Array: une liste dynamique d'objets, dont les clés sont des nombres entiers.
- Dict: une liste dynamique d'objets, dont les clés sont des textes.
Nous allons étudier le pouvoir des listes en commençant avec les tableaux (array).


Qu'est-ce qu'un tableau?

 Un tableau est une liste d'objets de types quelconques, auxquels on accède par une clé qui correspond à leur position.
L'avantage des tableaux est qu'il est possible de parcourir leur contenu en incrémentant une variable entière. Les tableaux en Scriptol ne fonctionnent pas comme ceux du C++ ou de Java. Ils sont dynamiques et cela signifie que leur taille n'est pas prédéfinie ni limitée.


Déclaration

Comme tout objet en Scriptol, un tableau est déclaré par le type suivi de l'identifieur:
array a

Le constructeur du tableau a la forme:
array(valeur, valeur, etc...)
Un initialiseur vide s'écrit:
array()

Donc la syntaxe complète de déclaration est:

array identifieur [ = array( [element [, element]* ) ]

Ce qui signifie:
- type array,
- nom de l'objet,
- optionellement, constructeur,
- symbole =
- type array,
- entre parenthèses de 0 à n éléments.


Le constructeur peut être utilisé directement dans une expression comme un litéral.
a = array(1, 2) + array(3, 4)


Opérations de pile

 Un tableau peut être utilisé comme une pile, les élément nouveaux étant empilés au début ou en fin de tableau, et dépilés de même...
 Les fonctions de piles sont les suivantes:
a.push("item") ...ajoute un élément à la fin de la liste
a.unshift("item") ...ajoute un élément au début de la liste
a.pop() ...lit et enlève le dernier élement
a.shift() ...lit et enlève le premier élement

Vous pouvez ainsi lire et éliminer les éléments d'un tableau par des instructions successives telles que:
print a.shift()


Assignement

L'exemple ci-dessous montre comment un tableau doit être rempli... Le tableau a est d'abord déclaré, et les instructions push empilent les éléments...

Exemple d'utilisation comme une pile. array a
a.push("un")
a.push("deux")
a.push("le dernier")

a.display()     `affichage du contenu
Affiche en Scriptol Php: array(
  [0] => un
  [1] => deux
  [2] => le dernier
)
Affiche en Scriptol C++: array(
 0 : un
 1 : deux
 2 : le dernier
)


L'assignement direct

Il est possible d'assigner un élement directement avec une position donnée...

Exemple d'assignement direct: a[1000] = "x"
a.display()
Affiche en Scriptol C++: array(
0 : un
1 : deux
2 : le dernier
1000 : x
)


Toutefois l'indice 1000 est seulement temporaire, dès qu'une instruction aura changé le tableau, les positions seront réassignées. Ce mode de fonctionnement provient de la compatibilité avec Php.

Une instruction de la forme a[n] = x doit plutôt servir à modifier la valeur à l'indice donné, plutôt qu'à assigner de nouveau éléments à un tableau, ce qui ne convient qu'aux dictionnaires (dict), comme on le verra plus loin.

Les tableaux à clé numériques (array), permettent de scanner le contenu en incrémentant la clé qui est un 'index de position. Les dictionnaires à clé textuelles, permettent de retrouver un élément contenu à partir de la clé, dont la position importe peu.

En conclusion, vous pouvez utiliser un tableau comme une pile en empilant et dépilant les éléments, ou comme vous le verrez, faire du traitement de liste comme en Lisp en ajoutant, découpant, décalant les éléments. Ou les utiliser comme des ensembles avec les opérateurs d'intersection et union, prendre le minimum, le maximum, la somme des éléments.


 Exercices
1) Soient les tableaux suivants:
array a = ("ax", "ay", "az")
array b = ("b1", "b2", "b3")
Otez successivement les éléments du tableau a, et ajouter les au tableau b (autant d'instructions que d'éléments).
Afficher le résultat.

Réponse