setfield modifie la valeur d'un élément d'une mlist, tlist ou list

## Séquence d'appel

    uL = setfield(a, v, L)

## Arguments

L
  liste de type `list`, `tlist` ou `mlist`, dont un élement doit être modifié.

a
  Adresse de l'élément de liste à modifier. Elle peut être soit un mot texte spécifiant un nom de champ, soit un entier positif indiquant le n° de l'élément dans la liste. Voir insertion pour plus de détails.

v
  Tout objet Scilab : la valeur à affecter à l'élément.

uL
  Liste modifiée.

## Description

`L=setfield(a,v,L)` adresse et modifie le ième élément d'une liste, selon une syntaxe identique pour tous les types list, tlist et mlist disponibles en Scilab.

Pour des simples list et pour des mlist, `L=setfield(a,v,L)` est équivalent à `L(a)=v`, qui est plus simple et préférable. L'équivalence tient aussi pour toute mlist si l'adresse `a` est le nom d'un champ.

En revanche, pour toute mlist `L`, si `i` est un n°, `L(i)=v` adresse le ième élément de `L` considérée comme un vecteur, au lieu du ième élément tel que déclaré dans la définition initiale `mlist(c1,c2,c3...)`. `setfield(i,v,L)` aura alors le même sens que pour les autres types de listes.

## Exemples

Pour une tlist, `setfield(3, v, T)` équivaut à `T(3)=v` :

    T = tlist(['V','a','b'], [%z (1-%z) %z^2], [%f %t %t]);
    // L'insertion est prédéfinie :
    T(3) = [%t %t %f];
    T(3)

    T = setfield(3, [%f %t %f], T);
    T(3)

    --> T = tlist(['V','a','b'], [%z (1-%z) %z^2], [%f %t %t]);
    --> // L'insertion est prédéfinie :
    --> T(3) = [%t %t %f];
    --> T(3)
     ans  =
      T T F

    --> T = setfield(3, [%f %t %f], T);
    --> T(3)
     ans  =
      F T F

Pour une mlist, aucune routine d'insertion indexée n'est prédéfinie. L'utilisateur est ainsi libre d'en définir une pour un adressage matriciel des données.

    M = mlist(['V','a','b'], [%z (1-%z) %z^2], [%f %t %t]);
    M.b = [%t %t %t];
    M.b                 // OK, alors que ...
    M(3) = [%f %t %f];  // => erreur

    // Une insertion directe avec setfield() est toujours possible :
    M = setfield(3, [%t %f %t], M);
    getfield(3, M)

    --> M = mlist(['V','a','b'], [%z (1-%z) %z^2], [%f %t %t]);
    --> M.b = [%t %t %t];
    --> M.b
     ans  =
      T T T

    --> M(3) = [%t %f %t];  // => erreur
    Fonction non définie pour les types fournis.
      vérifier les arguments ou définir la fonction %b_i_V pour la surcharge.

    --> // Une insertion directe avec setfield() est toujours possible :
    --> M = setfield(3, [%t %f %t], M);
    --> getfield(3, M)
     ans  =
      T F T

## Voir aussi

- insertion
- getfield

## History

6.0.0

- La liste modifiée est désormais donnée en réponse, au lieu d'être modifiée "sur place".
- setfield() ne peut plus être utilisée pour des tableaux de cellules.