I cicli For

In questo post voglio mostrarvi come si usa un ciclo for, costrutto importantissimo che è probabilmente presente in tutte le applicazioni.

Partiamo da un frammento di codice come questo:

   1: #light
   2: let results = [ for i in 0 .. 100 -> (i, i*i) ] 
   3: printfn "results = %A" results 

Notate, nella prima riga, la direttiva #light che abbiamo già incontrato in un post precedente. Questa è una semplificazione per i programmatori “non-OCaml” che si avvicinano al linguaggio F# e può anche essere omessa, perché è predefinita.
Il frammento di codice sembra banale, ma non lo è. Come potete vedere dalla figura seguente, restituisce un risultato che corrisponde a una lista.

image

Una lista è un costrutto primitivo utilizzato di frequente nei linguaggi funzionali e molto simile a una matrice. Tuttavia, una lista non consente un accesso basato sulla posizione, come la tradizionale sintassi a[i] di C#. Le liste sono utilizzate in molte occasioni nella programmazione funzionale e possono essere considerate l’equivalente in F# di List<T> del .NET Framework, anche se con alcune funzionalità migliorate.

Una lista è sempre di tipo particolare e, in questo caso, l’identificatore results rappresenta un elenco di tuple, specificamente il tipo di tupla identificato in F# come tipo (int * int).

Questa idea di una lista di tuple è familiare se considerata come l’equivalente di una coppia di colonne restituite da un’istruzione SELECT in SQL. Pertanto, nell’esempio viene creata essenzialmente una lista di coppie di numeri interi composto da 100 elementi.

Comunemente, nei linguaggi funzionali, le definizioni delle funzioni vengono utilizzate ovunque sia possibile utilizzare il codice stesso. Pertanto, se si desidera estendere l’esempio precedente, potete scrivere quanto riportato di seguito:

   1: let compute2 x = (x, x*x)
   2: let compute3 x = (x, x*x, x*x*x)
   3: let results2 = [ for i in 0 .. 100 -> compute2 i ]
   4: let results3 = [ for i in 0 .. 100 -> compute3 i ] 

Ecco quindi le due liste risultanti dall’esecuzione del frammento di codice riportato qui sopra:

image

Questa idea di eseguire un ciclo in una lista (o una matrice o qualche altro costrutto iterabile) è un’attività talmente comune nei linguaggi funzionali che è stata generalizzata come chiamata di metodo di base: List.iter. Questa funzione prevede semplicemente una chiamata a una funzione in ciascun elemento della lista.

Funzionalità molto utili sono inoltre fornite da altre funzioni di libreria simili. Ad esempio, List.map accetta una funzione come argomento e applica la funzione a ciascun elemento della lista, restituendo una nuova lista nel processo.

Pubblicato il 15 luglio 2015 su Novità. Aggiungi ai preferiti il collegamento . Lascia un commento.

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: