You are on page 1of 51

FUN-IMP

Funct, ii

, a
Traian Florin S, erbanut
FMI, UNIBUC
Departamentul de Informatica,
traian.serbanuta@fmi.unibuc.ro

2 decembrie 2014

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

1 / 41

Funct,ii/proceduri/subrutine

Exemple
Adunare s, i incrementare ca funct, ii de ordinul I

C/C++/. . .
int addition ( int x, int y) { return x+y; }
int increment(int x) { return x+1; }

OCaml
let addition = fun (x,y) > x + y
let increment = fun x > x + 1

Javascript
function addition(x,y) { return x + y; }
function increment(x) { return x + 1; }
,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

2 / 41

Funct,ii/proceduri/subrutine

Exemple
Stil funct, ional

Javascript addition = function (x) { return function(y) { return x+y; } }


increment = addition (1)

OCaml let adddition = fun x > fun y > x+y


let increment = addition 1

C# delegate int IntToInt ( int y );


delegate IntToInt IntToIntToInt ( int x );
class O {
public static void Main() {
IntToIntToInt addition = x => y => x + y;
IntToInt increment = addition (1);
System.Console.WriteLine(increment(3));
}
}
,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

3 / 41

Funct,ii/proceduri/subrutine

Exemple
Capturarea variabilelor din mediu n C#

delegate int IntThunk();


class M {
public static void Main() {
IntThunk[] funcs = new IntThunk[11];
for ( int i = 0; i <= 10; i ++) {
funcs[ i ] = () => i ;
}
for ( int i = 0; i <= 10; i ++) {
System.Console.WriteLine(f());
}
}
}

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

4 / 41

Funct,ii/proceduri/subrutine

Exemple
Capturarea variabilelor din mediu n C#

delegate int IntThunk();


class N {
public static void Main() {
IntThunk[] funcs = new IntThunk[11];
int i ;
for ( i = 0; i <= 10; i ++) {
funcs[ i ] = () => i ;
}
for ( i = 0; i <= 10; i ++) {
System.Console.WriteLine(funcs[i]());
}
}
}

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

5 / 41

Funct,ii/proceduri/subrutine

Exemple
Capturarea variabilelor de mediu n Javascript

var bar = function (x) {


return function() { var x = 5; return x; };
}
var f = bar(200);
f ()

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

6 / 41

FUN-IMP

Funct, ii + IMP = FUN-IMP


Exemple

fun (x: int ) > x+1


(fun (x: int ) > x+1) 7
fun (x: int ) > fun (y: int ) > x + y
(fun (x: int ) > fun (y: int ) > x + y) 1
fun (x: int >int) > fun (y: int ) > x (x y)
(fun (x: int >int) > fun (y: int ) > x (x y)) (fun (x: int ) > x+1)
(( fun (x: int >int) > fun (y: int ) > x (x y)) (fun (x: int ) > x+1)) 7

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

7 / 41

FUN-IMP

FUN-IMP
Sintaxa

Extindem sintaxa limbajului IMP cu variabile, funct, ii s, i aplicat, ia funct, iilor


Variabile x X, unde X = {x, y, z, . . .} disjuncta de mult, imea locat, iilor
de memorie L
Expresii
e ::= . . . | x | fun (x : T ) e | e e

Tipuri

T ::= int | bool | unit | T T


Tloc ::= intref

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

8 / 41

FUN-IMP

Sintaxa concreta
La fel ca n OCaml

Aplicarea funct, iilor se grupeaza la stnga


(fun (x: int ) > fun (y: int ) > x + y) 3 5
= (( fun (x: int ) > fun (y: int ) > x + y) 3) 5

Tipul sageat
a se grupeaza la dreapta
int > int > int = int > ( int > int )

fun se extinde ct de mult posibil la dreapta


fun (x: unit ) > x ; x

,a (UNIBUC)
Traian Florin S, erbanut

= fun (x: unit ) > (x ; x)

PDFunct,ii

2 decembrie 2014

9 / 41

Domeniul de vizibilitate al variabilelor

Domeniul de vizibilitate al variabilelor


C#

class P {
public static void Main() {
int i = 7 ;
System.Console.WriteLine(i);
{
System.Console.WriteLine(i);
int i = 13 ;
System.Console.WriteLine(i);
}
System.Console.WriteLine(i);
}
}

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

10 / 41

Domeniul de vizibilitate al variabilelor

Domeniul de vizibilitate al variabilelor


C++

#include <iostream>
using namespace std;
int main() {
int i = 7;
cout << i << endl;
{
cout << i << endl;
int i = 13;
cout << i << endl;
}
cout <<i << endl;
}

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

11 / 41

Domeniul de vizibilitate al variabilelor

Legare

fun (x : T ) e
x se numes, te parametru formal / variabila de legare
lui x
e se numes, te corpul funct, iei / domeniul legarii
Orice aparit, ie a lui x n e (care nu este parametru formal al altei funct, ii s, i nu
este n corpul unei funct, ii fun (x : T 0 ) e 0 cu acelas, i parametru formal x )
se refera la parametrul formal x al funct, iei definita mai sus
s, i se numes, te legata de acesta.

Vizibilitatea variabilei de legare este limitata strict la definit, ia funct, iei


n afara definit, iei funct, iei, nu conteaza numele variabilei de legare
Matematic vorbind, f (x ) = x + 1 e acelas, i lucru cu f (y ) = y + 1.

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

12 / 41

Domeniul de vizibilitate al variabilelor

-echivalent, a

Definit, ie intuitiva
Variabila de legare x din definit, ia fun (x : T ) e poate fi redenumita
mpreuna cu toate aparit, iile legate de ea (din e).
Procesul de redenumire a argumentului formal al unei definit, ii de
funct, ie se numes, te -conversie.

-conversia determina o relat, ie de echivalent, a numita -echivalent, a.

fun (x : int).x + y fun (z : int).z + y . fun (y : int).y + y

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

13 / 41

Domeniul de vizibilitate al variabilelor

Aparit, ie libera a unei variabile

Aparit, ie libera/legat
a
O aparit, ie a variabilei x n expresia e este libera daca nu este n corpul nici
unei definit, ii de funct, ie fun(x : T ) . . ..
Orice alta aparit, ie a lui x este legata de cea mai apropiata declarat, ie
fun(x : T ) . . . care o cont, ine.
Exemple
17
x +y

fun (x : int) x + 2
fun (x : int) x + z
if y then 2 + x else (fun (x : int) x + 2) z
fun (x : unit) fun (x : int) x
,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

14 / 41

Domeniul de vizibilitate al variabilelor

Variabile libere
Definit, ie formala

Funct, ia var care da mult, imea variabilelor care apar libere ntr-o expresie e
definita recursiv pe structura expresiilor:
var (x ) = {x }
var (fun (x : T ) e ) = var (e ) \ {x }
var (e1 e2 ) = var (e1 ) var (e2 )
var (n) = var (b ) = var (l ) = var (skip) = var (! l ) =
var (e1 o e2 ) = var (e1 ) var (e2 ), o {+, }
var (if eb then e1 else e2 ) = var (eb ) var (e1 ) var (e2 )
var (l := e ) = var (e )
var (e1 ; e2 ) = var (e1 ) var (e2 )
var (while eb do e done) = var (eb ) var (e )
,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

15 / 41

Evaluarea funct,iilor

Evaluarea funct, iilor ca substitut, ie

f (y + 5) nlocuind n
Data fiind f : Z Z, f (x ) = x x, simplificam
definit, ia funct, iei f variabila x cu valoarea data y + 5
f (y + 5) = (y + 5) (y + 5)

Folosind ideea de substitut, ie, f (y + 5) = (x x )[(y + 5)/x ]


Unde e [e 0 /x ] se defines, te intuitiv ca fiind expresia e n care aparit, iile
libere ale lui x se nlocuiesc cu e 0 .

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

16 / 41

Evaluarea funct,iilor

Substitut,ie

Substitut, ie
Exemple

Definit, ia intuitiva a substitut, iei e [e 0 /x ]


Se obt, ine prin nlocuirea cu e 0 a tuturor aparit, iilor libere ale lui x n e

(fun (x : int) x + y ) [4/y ]

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

17 / 41

Evaluarea funct,iilor

Substitut,ie

Substitut, ie
Exemple

Definit, ia intuitiva a substitut, iei e [e 0 /x ]


Se obt, ine prin nlocuirea cu e 0 a tuturor aparit, iilor libere ale lui x n e

(fun (x : int) x + y ) [4/y ] = fun (x : int) x + 4


(fun (x : int) x + y ) [4/x ]

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

17 / 41

Evaluarea funct,iilor

Substitut,ie

Substitut, ie
Exemple

Definit, ia intuitiva a substitut, iei e [e 0 /x ]


Se obt, ine prin nlocuirea cu e 0 a tuturor aparit, iilor libere ale lui x n e

(fun (x : int) x + y ) [4/y ] = fun (x : int) x + 4


(fun (x : int) x + y ) [4/x ] = fun (x : int) x + y
Deoarece x nu apare liber

(fun (x : int) x + y ) [x /y ]

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

17 / 41

Evaluarea funct,iilor

Substitut,ie

Substitut, ie
Exemple

Definit, ia intuitiva a substitut, iei e [e 0 /x ]


Se obt, ine prin nlocuirea cu e 0 a tuturor aparit, iilor libere ale lui x n e

(fun (x : int) x + y ) [4/y ] = fun (x : int) x + 4


(fun (x : int) x + y ) [4/x ] = fun (x : int) x + y
Deoarece x nu apare liber

(fun (x : int) x + y ) [x /y ] , fun (x : int) x + x


Deoarece variabila x ar fi capturata (incorect) de operatorul de legare.

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

17 / 41

Evaluarea funct,iilor

Substitut,ie

Substitut, ie
Exemple

Definit, ia intuitiva a substitut, iei e [e 0 /x ]


Se obt, ine prin nlocuirea cu e 0 a tuturor aparit, iilor libere ale lui x n e

(fun (x : int) x + y ) [4/y ] = fun (x : int) x + 4


(fun (x : int) x + y ) [4/x ] = fun (x : int) x + y
Deoarece x nu apare liber

(fun (x : int) x + y ) [x /y ] , fun (x : int) x + x


Deoarece variabila x ar fi capturata (incorect) de operatorul de legare.

(fun (x : int) x + y ) [x /y ] (fun (z : int) z + y ) [x /y ] =


fun (z : int) z + x

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

17 / 41

Evaluarea funct,iilor

Substitut,ie

Substitut, ie simultana

Definit, ie

O substitut, ie este o funct, ie part, iala de domeniu finit : X E care


asociaza expresii variabilelor.
Notat, ii

= [e1 /x1 , e2 /x2 , . . . , en /xn ]


se cites, te e1 nlocuies, te pe x1 , s, .a.m.d
Dom = {x1 , x2 , . . . , xn }
Im = {e1 , e2 , . . . , en }
substitut, iei expresiei e
e expresia obt, inuta n urma aplicarii

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

18 / 41

Evaluarea funct,iilor

Substitut,ie

Definit, ie formala (inductiva)


x = (x ) daca x Dom
x =x

daca x < Dom

n =n
e1 = e10

s, i la fel pentru b, !l, s, i skip


e2 = e20

(e1 e2 ) = e10 e20

La fel s, i pentru ceilalt, i constructori de limbaj, mai put, in fun


e = e0
(fun (x : T ) e ) =fun (x : T ) e 0

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

daca x < Dom var (Im )

2 decembrie 2014

19 / 41

Evaluarea funct,iilor

Substitut,ie

Definit, ie formala (inductiva)


x = (x ) daca x Dom
x =x

daca x < Dom

n =n
e1 = e10

s, i la fel pentru b, !l, s, i skip


e2 = e20

(e1 e2 ) = e10 e20

La fel s, i pentru ceilalt, i constructori de limbaj, mai put, in fun


e = e0
(fun (x : T ) e ) =fun (x : T ) e 0

daca x < Dom var (Im )

Ce facem daca x Dom var (Im )?


,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

19 / 41

Evaluarea funct,iilor

Substitut,ie

Substitut, ie
variabilelor
Evitarea capturarii

e 0 = e 0
(fun (x : T ) e ) =fun (x 0 : T ) e 0

x Dom var (Im )


daca x 0 < var (e ) var (Im )
0 = [x 0 /x ]

Daca x apare liber n Im


Alegem o variabila noua x 0 (care nu apare libera n e sau Im )
e 0 se obt, ine din e aplicnd substitut, ia obt, inuta din prin (re)definirea
lui x ca x 0
(
(x ), daca y , x
0
(y ) =
x 0 , daca y = x
redefinim pe x n 0 pentru ca toate aparit, iile libere ale lui x
Putem sa-l
n e sunt legate de parametrul formal al funct, iei.

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

20 / 41

Evaluarea funct,iilor

Substitut,ie

Substitut, ie
Exemplu

(fun (y : int) (fun (y : int) x + y ) y ) [y + 2/x ]

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

21 / 41

Evaluarea funct,iilor

Substitut,ie

Substitut, ie
Exemplu

(fun (y : int) (fun (y : int) x + y ) y ) [y + 2/x ]


= fun (y 0 : int) (((fun (y : int) x + y ) y ) [y 0 /y , y + 2/x ])
= fun (y 0 : int)
((fun (y : int) x + y ) [y 0 /y , y + 2/x ]) (y [y 0 /y , y + 2/x ])
= fun (y 0 : int) (fun (y 00 : int) ((x + y ) [y 00 /y , y + 2/x ])) y 0
= fun (y 0 : int)
(fun (y 00 : int) (x [y 00 /y , y + 2/x ]) + (y [y 00 /y , y + 2/x ])) y 0
= fun (y 0 : int) (fun (y 00 : int) ((y + 2) + y 00 ) y 0

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

21 / 41

Evaluarea funct,iilor

-echivalent,a

-echivalent, a
Definit, ie inductiva

(R)

(@)

e e
e1 e10

(S)

e e 0
e 0 e

e2 e20

(T)

e e 0 e 0 e 00
e e 00

( :=)

e1 e2 e10 e20

e e 0
l := e l := e 0

La fel s, i pentru ceilalt, i constructori de limbaj, mai put, in fun


(fun)

(conv)

e e 0
fun (x : T ) e fun (x : T ) e 0

fun (x : T ) e fun (y : T ) (e [y /x ]) daca y < var (e )

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

22 / 41

Evaluarea funct,iilor

-echivalent,a

, i de compatibilitate
Proprietat

Compatibilitate cu substitut, ia
e1 e10 s, i e2 e20 = e1 [e2 /x ] e10 [e20 /x ]
Substitut, ia e funct, ionala modulo -echivalent, a
e = e1 s, i e = e2 = e1 e2

Compatibilitate cu var
e e 0 = var (e ) = var (e 0 )

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

23 / 41

Evaluarea funct,iilor

-echivalent,a

Termeni FUN-IMP

Definit, ie
Un termen FUN-IMP este o clasa de echivalent, a modulo .

termenii obt, inut, i prin redenumirea variabilelor legate


Identificam
clasa de echivalent, a prin oricare din reprezentant, i.
Simplificare: notam

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

24 / 41

Evaluarea funct,iilor

Strategii de evaluare

Evaluarea funct, iilor

Fie expresia e data de


(fun (x : unit ) > l := 5 ; x ; x) ( l := ! l + 1)

init, iale he , {l 7 0}i?


Care este starea finala corespunzatoare
starii

he , {l 7 0}i hskip, {l 7???}i

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

25 / 41

Evaluarea funct,iilor

Strategii de evaluare

Evaluare stricta (Cam toate limbajele, inclusiv OCaml)


Pentru a reduce e1 e2 :
Reducem e1 pna la o funct, ie fun (x : T ) e
Apoi reducem e2 pna la o valoare v
Apoi reducem (fun (x : T ) e ) v la e [v /x ]

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

26 / 41

Evaluarea funct,iilor

Strategii de evaluare

Evaluare stricta (Cam toate limbajele, inclusiv OCaml)


Pentru a reduce e1 e2 :
Reducem e1 pna la o funct, ie fun (x : T ) e
Apoi reducem e2 pna la o valoare v
Apoi reducem (fun (x : T ) e ) v la e [v /x ]

h(fun(x : unit ) l := 5; x ; x )(l :=!l + 1), {l 7 0}i


h(fun(x : unit ) l := 5; x ; x )(l := 0 + 1), {l 7 0}i
h(fun(x : unit ) l := 5; x ; x )(l := 1), {l 7 0}i
h(fun(x : unit ) l := 5; x ; x ) skip, {l 7 1}i
hl := 5; skip; skip, {l 7 1}i
hskip; skip; skip, {l 7 5}i
hskip; skip, {l 7 5}i
hskip, {l 7 5}i

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

26 / 41

Evaluarea funct,iilor

Strategii de evaluare

Evaluare non-stricta (Limbaje pur funct, ionale)


Pentru a reduce e1 e2 :
Reducem e1 pna la o funct, ie fun (x : T ) e
Apoi reducem (fun (x : T ) e ) e2 la e [e2 /x ]

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

27 / 41

Evaluarea funct,iilor

Strategii de evaluare

Evaluare non-stricta (Limbaje pur funct, ionale)


Pentru a reduce e1 e2 :
Reducem e1 pna la o funct, ie fun (x : T ) e
Apoi reducem (fun (x : T ) e ) e2 la e [e2 /x ]

h(fun(x : unit ) l := 5; x ; x )(l :=!l + 1), {l 7 0}i


hl := 5; l :=!l + 1; l :=!l + 1, {l 7 0}i
hskip; l :=!l + 1; l :=!l + 1, {l 7 5}i
hl :=!l + 1; l :=!l + 1, {l 7 5}i
hl := 5 + 1; l :=!l + 1, {l 7 5}i
hl := 6; l :=!l + 1, {l 7 5}i
hskip; l :=!l + 1, {l 7 6}i
hl :=!l + 1, {l 7 6}i
hl := 6 + 1, {l 7 6}i
hl := 7, {l 7 6}i
hskip, {l 7 7}i

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

27 / 41

Evaluarea funct,iilor

Strategii de evaluare

Evaluare lenes, a
ale limbajelor pure gen Haskell
Implementari

Pentru a reduce e1 e2 :
Reduc e1 pna la o funct, ie fun (x : T ) e
Apoi reduc corpul funct, iei e pna la un e 0 care are nevoie de x
Apoi reduc e2 pna la o valoare v
Apo reduc (fun (x : T ) e 0 ) v la e 0 [v /x ]

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

28 / 41

Evaluarea funct,iilor

Strategii de evaluare

Evaluare lenes, a
ale limbajelor pure gen Haskell
Implementari

Pentru a reduce e1 e2 :
Reduc e1 pna la o funct, ie fun (x : T ) e
Apoi reduc corpul funct, iei e pna la un e 0 care are nevoie de x
Apoi reduc e2 pna la o valoare v
Apo reduc (fun (x : T ) e 0 ) v la e 0 [v /x ]

h(fun(x : unit ) l := 5; x ; x )(l :=!l + 1), {l 7 0}i


h(fun(x : unit ) skip; x ; x )(l :=!l + 1), {l 7 5}i
h(fun(x : unit ) x ; x )(l :=!l + 1), {l 7 5}i
h(fun(x : unit ) x ; x )(l := 5 + 1), {l 7 5}i
h(fun(x : unit ) x ; x )(l := 6), {l 7 5}i
h(fun(x : unit ) x ; x ) skip, {l 7 6}i
hskip; skip, {l 7 6}i
hskip, {l 7 6}i

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

28 / 41

Evaluarea funct,iilor

Strategii de evaluare

Evaluare nerestrict, ionata

Pentru a reduce e1 e2
Reducem fie e1 fie e2
Putem reduce corpurile funct, iilor
Oricnd avem (fun (x : T ) e 0 )e 00 , o putem (sau nu) reduce la
e 0 [e 00 /x ]

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

29 / 41

Evaluarea funct,iilor

Strategii de evaluare

Evaluare normala
Pentru a reduce e1 e2
Reducem mereu cel mai din stnga redex din cele de mai sus
Reducem (fun (x : T ) e 0 )e 00 la e 0 [e 00 /x ]
Reducem e1 (putem reduce s, i corpurile funct, iilor)
Daca e1 9, reducem e2

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

30 / 41

Evaluarea funct,iilor

Strategii de evaluare

Evaluare normala
Pentru a reduce e1 e2
Reducem mereu cel mai din stnga redex din cele de mai sus
Reducem (fun (x : T ) e 0 )e 00 la e 0 [e 00 /x ]
Reducem e1 (putem reduce s, i corpurile funct, iilor)
Daca e1 9, reducem e2

h(fun(x : unit ) l := 5; x ; x )(l :=!l + 1), {l 7 0}i


h(fun(x : unit ) skip; x ; x )(l :=!l + 1), {l 7 5}i
h(fun(x : unit ) skip; x ; x )(l :=!l + 1), {l 7 5}i
h(fun(x : unit ) x ; x )(l :=!l + 1), {l 7 5}i
hl :=!l + 1; l :=!l + 1, {l 7 5}i
hl := 5 + 1; l :=!l + 1, {l 7 5}i
hl := 6; l :=!l + 1, {l 7 5}i
hskip; l :=!l + 1, {l 7 6}i
hl :=!l + 1, {l 7 6}i
hl := 6 + 1, {l 7 6}i
hl := 7, {l 7 6}i

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

30 / 41

Evaluarea funct,iilor

Reguli de reduct,ie

Evaluare stricta
Pentru a reduce e1 e2 :
Reducem e1 pna la o funct, ie fun (x : T ) e
Apoi reducem e2 pna la o valoare v
Apoi reducem (fun (x : T ) e ) v la e [v /x ]
Reguli
(S@S)

(S@D)
(S@)

he1 , s i
he10 , s 0 i
he1 e2 , s i
he10 e2 , s 0 i
he2 , s i
he20 , s 0 i
h(fun (x : T ) e1 ) e2 , s i
h(fun (x : T ) e1 ) e20 , s 0 i
h(fun (x : T ) e1 ) v2 , s i
he , s i daca e = e1 [v2 /x ]

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

31 / 41

Evaluarea funct,iilor

Reguli de reduct,ie

Evaluare non-stricta

Pentru a reduce e1 e2 :
Reducem e1 pna la o funct, ie fun (x : T ) e
Apoi reducem (fun (x : T ) e ) e2 la e [e2 /x ]
Reguli
(NS@S)
(NS@)

he1 , s i
he10 , s 0 i
he1 e2 , s i
he10 e2 , s 0 i
h(fun (x : T ) e1 ) e2 , s i
he , s i daca e = e1 [e2 /x ]

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

32 / 41

Evaluarea funct,iilor

Reguli de reduct,ie

Evaluare nerestrict, ionata


Pentru a reduce e1 e2
Reducem fie e1 fie e2
Putem reduce corpurile funct, iilor
Oricnd avem (fun (x : T ) e 0 )e 00 , o putem (sau nu) reduce la
e 0 [e 00 /x ]
Reguli

he1 , s i
he10 , s 0 i
he1 e2 , s i
he10 e2 , s 0 i
he2 , s i
he20 , s 0 i
(NR@D)
he1 e2 , s i
he1 e20 , s 0 i
he , s i
he 0 , s 0 i
(NRfunD)
hfun (x : T ) e , s i
hfun (x : T ) e 0 , s i
(NR@) h(fun (x : T ) e1 ) e2 , s i
he , s i daca e = e1 [e2 /x ]
(NR@S)

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

33 / 41

Evaluarea funct,iilor

Reguli de reduct,ie

Evaluare normala
Pentru a reduce e1 e2
Reducem mereu cel mai din stnga redex din cele de mai sus
Reducem (fun (x : T ) e 0 )e 00 la e 0 [e 00 /x ]
Reducem e1 (putem reduce s, i corpurile funct, iilor)
Daca e1 9, reducem e2
Reguli

h(fun (x : T ) e1 ) e2 , s i
he , s i daca e = e1 [e2 /x ]
0 0
he1 , s i
he1 , s i
daca e1 nu e nca funct, ie
(Nor@S)
he1 e2 , s i
he10 e2 , s 0 i
he , s i
he 0 , s 0 i
(NorfunD)
hfun (x : T ) e , s i
hfun (x : T ) e 0 , s i
he1 , s i 9 he2 , s i
he20 , s 0 i
(Nor@D)
he1 e2 , s i
he1 e20 , s 0 i

(Nor@)

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

34 / 41

Evaluarea funct,iilor

Reguli de reduct,ie

Evaluare lenes, a
ale limbajelor pure gen Haskell
Implementari

Pentru a reduce e1 e2 :
Reduc e1 pna la o funct, ie fun (x : T ) e
Apoi reduc corpul funct, iei e pna la un e 0 care are nevoie de x
Apoi reduc e2 pna la o valoare v
Apo reduc (fun (x : T ) e 0 ) v la e 0 [v /x ]
Reguli?
seama ca e 0 are
E mai complicat dect pare, deoarece trebuie sa ne dam
nevoie de x.

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

35 / 41

Evaluarea funct,iilor

Reguli de reduct,ie

Lenevire n Maude
Lista numerelor naturale

fmod LISTALENESA is including NAT .


sort ListaLenesa .
op nil : > ListaLenesa .
op __ : Nat ListaLenesa > ListaLenesa [strat (1)] .
var M N : Nat . var L L' : ListaLenesa .
op _.. infinit : Nat > ListaLenesa .
eq N .. infinit = N s(N) .. infinit .
op primele_din_ : Nat ListaLenesa > ListaLenesa .
ceq primele s(N) din M L = M L'
if L' := primele N din L .
eq primele 0 din L = nil .
endfm
red 2 .. infinit .
***> result ListaLenesa : 2 3 .. infinit
red primele 4 din 2 .. infinit . ***> result ListaLenesa: 2 3 4 5 nil
,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

36 / 41

Evaluarea funct,iilor

Reguli de reduct,ie

Lenevire n Maude
Ciurul lui Eratostene

fmod ERATOSTENE is including LISTALENESA .


var M N : Nat . var L L' : ListaLenesa .
op cerne : ListaLenesa > ListaLenesa .
eq cerne(N L) = N cerne(elimina multiplii lui N din L) .
op elimina multiplii lui_din_ : Nat ListaLenesa > ListaLenesa .
eq elimina multiplii lui N din M L
= if N divides M
then elimina multiplii lui N din L
else M elimina multiplii lui N din L
fi .
endfm
red elimina multiplii lui 2 din 2 .. infinit .
***> result ListaLenesa : 3 elimina multiplii lui 2 din 4 .. infinit
red primele 10 din cerne(2 .. infinit ) .
***> result ListaLenesa: 2 3 5 7 11 13 17 19 23 29 nil
,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

37 / 41

Semantica operat,ionala contextuala

Contexte de evaluare

a cu un algoritm de analiza sintactica


Gasirea
redex-ului se aseaman
Putem nlocui regulile structurale cu reguli gramaticale

Sintaxa:

e ::= n | l | e op e

Reguli structurale

Contexte de evaluare

he1 , i he10 , i
he1 op e2 , i he10 op e2 , i

he2 , i he20 , i
hn1 op e2 , i hn1 op e20 , i

::= 
|

c op e

n op c

Instant, ierea unui context c cu expresia e


c [e ] = c [e /]
,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

38 / 41

Semantica operat,ionala contextuala

Contexte de evaluare
Exemple

e ::= n | l | e op e
Sintaxa:
Contexte: c ::=  | c op e | n op c
Exemple de contexte
Corecte


3
9 + 3 ( + 7)

Gres, ite
5
x +
3 3 + 3 ( + 7)

Exemple de contexte instant, iate

[x + 1] = x + 1
(9 + 3 ( + 7))[x ] = 9 + 3 (x + 7)
(9 + 3 ( + 7))[5] = 9 + 3 (5 + 7)
,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

39 / 41

Semantica operat,ionala contextuala

Semantica Operat, ionala Contextuala


[Felleisen, 1992]

Un pas de execut, ie folosind contexte de evaluare


Descompune expresia n contextul c s, i redex-ul r
Aplica o regula operat, ionala asupra lui r obt, innd e
Pune e n contextul init, ial, obt, innd c [e ]

hr , i he , i
hc [r ], i hc [e ], i
Semantica: definit, ii de contexte s, i reguli de reduct, ie
Contexte: c ::=  | c op e | n op c

e ::= n | l | e op e
Sintaxa:

Reguli: hl , i hn, i daca n = (l )


hn1 op n2 , i hn, i daca n = n1 opint n2
,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

40 / 41

Semantica operat,ionala contextuala

Evaluare lenes, a folosind Semantica Contextuala


Idee de baza

Contexte de evaluare pentru aplicat, ie


c

::=
|
|
|
|


...
ce

(fun (x : T ) c ) e
(fun (x : T ) c [x ]) c

Regula de evaluare pentru aplicat, ie

h(fun (x : T ) c [x ]) v , s i
h(fun (x : T ) c [v ]) v , s i

,a (UNIBUC)
Traian Florin S, erbanut

PDFunct,ii

2 decembrie 2014

41 / 41

You might also like