Varianti di controllo del loop

Loop limitati

Il modo più semplice di controllare un loop consiste nello specificare direttamente il numero di volte che il ciclo deve essere ripetuto, in un cosiddetto "loop limitato". Il numero di ripetizioni può essere una costante numerica, ad esempio loop 1000, o può essere letto da una variabile, come in loop volte.

Se il numero di ripetizioni è indicato da una variabile, ad es. volte, la variabile dovrebbe essere uno scalare intero: se si usa una serie, viene letto il primo valore, e se questo non è intero, viene troncata la sua parte decimale. Si noti che volte viene valutata solo una volta, quando il loop viene impostato.

Loop di tipo "while"

Un secondo tipo di espressione di controllo consiste nell'uso del comando while seguito da una disuguaglianza, in cui il termine a sinistra è il nome di una variabile predefinita, mentre il lato destro può essere una costante numerica o il nome di un'altra variabile predefinita. Ad esempio:

loop while differ > .00001

L'esecuzione del ciclo di comandi continuerà fintanto che la condizione specificata rimane vera. Se il termine a destra della disuguaglianza è una variabile, essa viene valutata all'inizio di ogni nuova iterazione del ciclo.

Loop con indice

Un terzo tipo di controllo di un loop utilizza la speciale variabile indice i. In questo caso, vengono specificati valori iniziali e finali per i, che viene incrementata di uno ogni volta che viene eseguito il ciclo. La sintassi è la seguente: loop i=1..20.

La variabile indice può essere usata all'interno del corpo del loop, in uno dei modi seguenti: è possibile accedere al valore di i (si veda l'Esempio 9-4), oppure è possibile usare la sua rappresentazione come stringa $i (si veda l'Esempio 9-5).

I valori iniziale e finale per l'indice possono essere indicati in forma numerica, o come riferimento a variabili predefinite. Nell'ultimo caso, le variabili vengono valutate una volta, quando il loop viene impostato. Inoltre, con dataset di serie storiche è possibile indicare i valori iniziale e finale sotto forma di date, ad esempio: loop i=1950:1..1999:4.

Loop di tipo "for each"

Anche il terzo tipo di controllo usa la variabile interna i, che in questo caso può assumere valori solo all'interno di una lista specifica di stringhe. Il loop è eseguito una volta per ogni stringa presente nella lista, agevolando l'esecuzione di operazioni ripetitive su un gruppo di variabili. Ecco un esempio:


        loop foreach i mele pere pesche
          print "$i"
        endloop
      

Questo loop verrà eseguito tre volte, mostrando "mele", "pere" e "pesche" ad ogni iterazione.

Loop di tipo "for"

L'ultimo tipo di controllo usa una forma semplificata dell'istruzione for del linguaggio di programmazione C. L'espressione di controllo si compone di tre parti, separate da punto e virgola. La prima parte specifica una condizione iniziale, espressa per mezzo di una variabile di controllo; la seconda parte imposta una condizione di continuazione (espressa in funzione della stessa variabile di controllo), mentre la terza parte specifica un incremento (o un decremento) per la variabile di controllo, da applicare ogni volta che il ciclo viene eseguito. L'intera espressione deve essere racchiusa tra parentesi. Ad esempio:

loop for (r=0.01; r<.991; r+=.01)

La variable r assumerà i valori 0.01, 0.02, …, 0.99 nel giro di 99 iterazioni. Si noti che a causa della precisione limitata dell'aritmetica in virgola mobile usata dal computer, può dover essere necessario usare una condizione di continuazione come quella mostrata sopra, r<.991, invece della più "naturale" r<=.99 (usando numeri in doppia precisione su un processore x86, quando ci si aspetta che r valga 0.99, potrebbe in realtà valere 0.990000000000001).

Altre regole per i tre componenti dell'espressione di controllo: (1) la condizione iniziale deve avere forma X1 = Y1, dove Y1 deve essere una costante numerica o una variabile predefinita. Se la variabile X1 non esiste, viene creata automaticamente. (2) La condizione di continuazione deve avere la forma X1 operatore Y2, dove l'operatore può essere <, >, <= o >= e Y2 deve essere una costante numerica o una variabile predefinita (nel caso in cui sia una variabile, essa viene valutata ad ogni esecuzione del ciclo). (3) L'espressione che indica l'incremento o il decremento deve avere la forma X1 += DELTA, oppre X1 -= DELTA, dove DELTA è una costante numerica o una variabile predefinita (nel secondo caso, essa viene valutata solo una volta, quando il loop viene impostato).