“Eager evaluation” (detta anche “greedy evaluation”) e l’opposto “Lazy evaluation”

F# include un componente di programmazione funzionale che supporta la cosiddetta “Eager evaluation”, detta anche “Greedy evaluation”. Per la programmazione funzionale, questo componente fornisce vari costrutti e un insieme di tipi immutabili: tuple, record, unioni discriminate e liste.

Il termine “Eager” significa sostanzialmente “impaziente, avido” ed è all’opposto di “Lazy”, ovvero “pigro”.

Nella eager evaluation, un’espressione è valutata non appena viene assegnata a una variabile (che nel caso di F# è opportuno chiamare “identificatore”), mentre nella lazy evaluation l’espressione è valutata solo nel momento in cui è richiesto il risultato.

Vediamo ora i tipi immutabili di cui ho fatto cenno all’inizio di questo post.

n-tuple

Una n-tupla rappresenta una collezione di “n” valori, dove “n” è maggiore o uguale a zero.

Il tipo  unit  corrisponde alla 0-tupla e ha un solo valore:  (), che indica “nessuna informazione” (sostanzialmente l’insieme vuoto).

Il tipo unit è utilizzato per implementare funzioni che non hanno necessità di input e/o non restituiscono valori.

Una 3-tupla potrebbe essere rappresentata da  (A, B, C), dove A, B e C sono valori di possibili differenti tipi.

Una tupla può essere utilizzata solo per memorizzare valori quando il numero di valori stessi è conosciuto al momento della definizione (a design-time) e rimane costante durante l’esecuzione.

record

Un record è una specializzazione delle tuple dove gli elementi dei dati sono denominati, come in { Name: string; Age: int}.

I record possono essere creati con la forma  { Name = “AB”; Age = 42 }.

La parola riservata with è utilizzata per creare una copia di un record, per esempio { r with Name = “CD” }, che crea un nuovo record copiando r e cambiando il valore del campo Name (assumendo che il record creato nell’ultimo esempio sia denominato r).

liste

Il tipo list è una normale linked list rappresentata in due varianti:

  • una notazione head::tail (:: è l’operatore cosiddetto “cons”, per dividere due parti di una lista)

  • una notazione abbreviata come [item1; item2; item3].

Una lista vuota è scritta con la notazione [].

unioni discriminate

E’ un altro tipo di dati algebrico che può essere definito per mantenere un valore di un tipo previsto tra quelli predefiniti. Per esempio:

type A = 
   | valX of string
   | valY of int

let

Per dichiarare un identificatore (non chiamateli variabili, per favore!), si utilizza la parola riservata let.

Ma questa è un’altra storia…

Pubblicato il 8 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: