• Non ci sono risultati.

Scoping in Standard ML

N/A
N/A
Protected

Academic year: 2021

Condividi "Scoping in Standard ML"

Copied!
9
0
0

Testo completo

(1)

Scoping in Standard ML

Luca Abeni, Csaba Kiraly

April 11, 2016

(2)

Bindings

• Per associare nomi a valori, abbiamo gia visto:

val: aggiunge binding all’ambiente (esempio: val x = 1;)

val rec: per funzioni ricorsive (rende il simbolo visibile all’espressione che ne stabilisce il valore)

fun: sintassi abbellita (“zucchero sintattico”) per val rec

• Abbiamo visto esempi con scope globale v a l x = 1 ;

v a l sq = x ∗ x ; sq ;

v a l x = 2 ; sq ;

• Che si pu `o dire di blocchi annidati (scope locale / non-locale)?

Scoping statico o dinamico?

(3)

Scoping

v a l v = 1 ; v a l x = 2 ;

v a l f = fn x => x + v ;

• Visibilit `a di x?

fn crea un blocco di annidamento

• crea anche nuovo binding (per il parametro formale) in tale blocco

• pu `o mascherare un binding esistente

• smette di mascherare alla fine del blocco

• Visibilit `a di v all’interno di f?

• simbolo non-locale (alcuni linguaggi funzionali dicono “free variable”)

• ereditato dal blocco esterno

(4)

Scoping / 2

• Scoping statico o dinamico?

v a l v = 1 ;

v a l f = fn x => x + v ; v a l v = 2 ;

f 3 ;

• Se scoping statico, f 3 `e valutato a 4

• Se scoping dinamico, f 3 `e valutato a 5

(5)

Modificare l’Ambiente Locale

• Parole chiave per introdurre binding nell’ambiente locale di un blocco

• Binding non attivi fuori dal blocco

let declaration in expression end

local declaration1 in declaration2 end

Modifica ambiente locale (fra in e end), no effetti fuori dal blocco

• Binding locali al blocco

• Attivati quando si entra nel blocco, disattivati quando si esce

Notare differenze fra let e local

local vuole dichiarazione fra in e end

• Modifica ambiente locale di tale dichiarazione

let vuole espressione fra in e end

• Crea blocco di annidamento per tale espressione

(6)

Ambiente Locale: Esempio

• Esempio:

• la funzione fattoriale dovrebbe essere definita solo su numeri naturali...

• ...ma ML non conosce unsigned int!

• Cosa succede con

fun fact n = if n = 0 then 1 else n ∗ fact (n − 1) se invoco fact ˜1???

• Evitiamo il problema con un check:

v a l rec f a c t = fn n =>

i f n < 0 then ˜ 1 else

i f n = 0 then 1 else n ∗ f a c t ( n − 1 ) ;

Problema: if n < 0... `e valutata ad ogni chiamata ricorsiva Si pu `o evitare usando local?

(7)

local fact

l o c a l

v a l rec f f a c t = fn n =>

i f n = 0 then 1 else n ∗ f f a c t ( n − 1) i n

v a l rec f a c t = fn n =>

i f n < 0 then ˜ 1 else f f a c t ( n ) end ;

• Problema precedente (check su n < 0 ad ogni chiamata ricorsiva) risolto controllando n prima di invocare la funzione ricorsiva

local usato per “nascondere” la funzione “fattoriale senza check”

(ffact)

Esercizio: implementare fattoriale con check usando let

Nota la differenza: let definisce binding locale in un’espressione

(8)

let fact

v a l rec f a c t = fn n =>

l e t

v a l rec f f a c t = fn n =>

i f n = 0 then 1 else n ∗ f f a c t ( n − 1) i n

i f n < 0 then ˜ 1 else f f a c t ( n ) end ;

• Esercizio: implementare la versione tail recursive di fact con local o let

(9)

local tail recursive fact

l o c a l

v a l rec f a c t 1 = fn n => fn r e s =>

i f n = 0 then r e s else f a c t 1 ( n − 1) ( n ∗ res ) i n

v a l rec f a c t = fn n =>

f a c t 1 n 1 end ;

Riferimenti

Documenti correlati

strutturazione delle attività didattiche funzionale alla costruzione di conoscenze e competenze. un curriculum minimo forte di storia in grado di garantire

Considering the range of policy decisions that need to be taken when dealing with asylum seekers and refugees, we suggest that the core dimensions of asylum and refugee policy

Starting in the final months of 2017, an increasing number of Syrian charitable and development NGOs hailing from outside the governorate began opening offices and launching

career would guarantee, respect to the average income of graduates (which is 1.388 euro per month for graduate people five years after graduation, as reported by.

 problema: ospitare più servizi sullo stesso server.  gli indirizzi IPv4 pubblici sono pochi,

Non sono ancora disponibili i prezzi al pubblico delle dure vetture e neppure il sistema di tariffazione per il servizio di sostituzione delle batterie, tuttavia

The quantitative content analysis shows that the SPD attempted to shift its position on the welfare state and economic liberalism, but remained wedded to orthodox fiscal policies

China in fact, represents a paradox: it is the country where people buy more Rolls Royce than in the rest of the world, being at the same time the country where 82