fonction example_list
mmachine | m |
Code interne de la fonction Scol 'example_list' Celle-ci attend trois arguments : une liste d'entiers, un entier et un drapeau. Selon la valeur du drapeau, chaque élément de la liste sera incrémenté ou décrémenté de la valeur du second argument. En retour, la fonction Scol donne la nouvelle liste d'entiers. Son prototype est donc : example_list : fun [[I r1] I I] [I r1]
Nous allons donc devoir extraire les éléments de la liste et en construire une nouvelle en sortie.
L'extraction d'une liste suit la même logique que pour un tuple sauf qu'on utilise une boucle 'while' puisqu'on ne connaît pas a priori le nombre d'éléments. WHILE (liste non vide) e = premier élément de liste SI e non vide instructions liste = suite de la liste
Si 'e' est lui-même une liste ou un tuple, on traite de la même façon. Par exemple, si le type de l'argument est [[u0 u1 u2] r1], on aura :
(mlist != NIL) { element = MMfetch (m, mlist, 0)>>1; if (element != NIL) { mvalue0 = MMfetch (m, element, 0)>>1; mvalue1 = MMfetch (m, element, 1)>>1; mvalue2 = MMfetch (m, element, 2)>>1; ... } mlist = MMfetch(m, mlist, 1)>>1; }