0% found this document useful (0 votes)
34 views51 pages

07 - Functii

This document discusses functions and procedures in various programming languages like C/C++, OCaml, Javascript, C#, and FUN-IMP. It provides examples of defining simple functions like addition and increment as functions of order 1. It also demonstrates passing functions as arguments and capturing variables. The document defines key concepts related to functions like formal parameters, scope of variables, alpha equivalence, free and bound variables, and substitution.

Uploaded by

Sorin Srn
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
34 views51 pages

07 - Functii

This document discusses functions and procedures in various programming languages like C/C++, OCaml, Javascript, C#, and FUN-IMP. It provides examples of defining simple functions like addition and increment as functions of order 1. It also demonstrates passing functions as arguments and capturing variables. The document defines key concepts related to functions like formal parameters, scope of variables, alpha equivalence, free and bound variables, and substitution.

Uploaded by

Sorin Srn
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 51

FUN-IMP

Funct, ii

, a
Traian Florin S, erbanut
FMI, UNIBUC
Departamentul de Informatica,
[email protected]

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