Processing math: 100%
Abstrasy
2.0 (beta)

Piste: vector
 

vector

Le type vector est la variante à contenu mutable du type array. Au lieu d'être un tableau de valeurs immuables, un vector est un tableau de références. Sa structure immuable est donc formée de cellules d'indirection ref (structure représentée en bleu dans le schéma ci-contre).

Comme array, vector est un tableau indexé dans lequel on peut accéder facilement et rapidement aux éléments à l'aide d'un indice (opération réalisée en temps constant ). Dans un vecteur immuable de taille n, les éléments reçoivent un indice allant de 0 à n-1.

Bien que les éléments d'un vecteur immuable soient mutables, leur affectation ne produit aucun effet de bord supplémentaire (en considérant, d'un point de vue absolu, que l'affectation est un effet de bord). Toute modification de la structure d'un vector nécessite donc sa duplication complète et la production d'un nouveau vector.

Cela signifie que contrairement à ce qui se produit parfois dans d'autres langages de programmation, l'affectation d'un élément d'un vector lui-même obtenu à partir d'une section d'un autre vector ne produit aucun effet de bord sur ce dernier. La copie complète de la structure des vecteurs immuables constitue une barrière qui empêche la propagation des effets de bord aux autres instances.


Créer une nouvelle instance du type vector

L'opérateur vector permet de construire une nouvelle instance vector. Cette construction peut aussi être réalisée par conversion.

(define 'v0 (vector 3))
(define 'v1 (vector[1 2 3]))
(display v0)
(display v1)

(vector[(nothing) (nothing) (nothing)])
(vector[1 2 3])

De cette manière, on peut créer un nouveau vecteur immuable en spécifiant uniquement sa taille. Dans ce cas, le contenu du vecteur est initialisé avec la valeur par défaut (nothing). Si on crée un nouveau vecteur immuable par conversion, les éléments du vector sont initialisé à partir de la collection à convertir.


Autres opérations élémentaires

On peut ajouter des éléments à un vector à l'aide de l'opérateur +. Dans ce cas, une nouvelle cellule d'indirection est créée pour chaque élément supplémentaire. Seule la valeur est copiée dans la nouvelle cellule. Si l'élément est lui-même contenu dans une cellule d'indirection, cette cellule n'est jamais ajoutée directement dans la nouvelle structure du vecteur immuable.

Il en va également de même lors de l'utilisation de concat. Les cellules d'indirection des vectors a concaténer sont dupliqués et non inséré directement dans la nouvelle structure. On comprend dès lors que les opérations qui consistent à modifier la structure d'un vecteur immuable sont très coûteuses en temps et en ressources (en ). L'intérêt principal des vectors consiste à fournir une structure de tableau au contenu mutable.

Comme pour les autres types de collections, vector supporte les opérateurs car, cdr, tail, head, slide et length. En outre, le type vector a aussi une valeur de vérité qui est (false) lorsqu'il est vide.


Opérateurs

refs/lang/typeindex/vector.txt · Dernière modification: 2013/05/31 12:02 (modification externe)

Retour
Table des mati�res

 

     
Licence Creative Commons
   Get abstrasy at SourceForge.net. Fast, secure and Free Open Source software downloads