Professional Documents
Culture Documents
07 - Functii
07 - Functii
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
PDFunct,ii
2 decembrie 2014
3 / 41
Funct,ii/proceduri/subrutine
Exemple
Capturarea variabilelor din mediu n C#
,a (UNIBUC)
Traian Florin S, erbanut
PDFunct,ii
2 decembrie 2014
4 / 41
Funct,ii/proceduri/subrutine
Exemple
Capturarea variabilelor din mediu n C#
,a (UNIBUC)
Traian Florin S, erbanut
PDFunct,ii
2 decembrie 2014
5 / 41
Funct,ii/proceduri/subrutine
Exemple
Capturarea variabilelor de mediu n Javascript
,a (UNIBUC)
Traian Florin S, erbanut
PDFunct,ii
2 decembrie 2014
6 / 41
FUN-IMP
,a (UNIBUC)
Traian Florin S, erbanut
PDFunct,ii
2 decembrie 2014
7 / 41
FUN-IMP
FUN-IMP
Sintaxa
Tipuri
,a (UNIBUC)
Traian Florin S, erbanut
PDFunct,ii
2 decembrie 2014
8 / 41
FUN-IMP
Sintaxa concreta
La fel ca n OCaml
Tipul sageat
a se grupeaza la dreapta
int > int > int = int > ( int > int )
,a (UNIBUC)
Traian Florin S, erbanut
PDFunct,ii
2 decembrie 2014
9 / 41
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
#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
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.
,a (UNIBUC)
Traian Florin S, erbanut
PDFunct,ii
2 decembrie 2014
12 / 41
-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.
,a (UNIBUC)
Traian Florin S, erbanut
PDFunct,ii
2 decembrie 2014
13 / 41
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
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
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)
,a (UNIBUC)
Traian Florin S, erbanut
PDFunct,ii
2 decembrie 2014
16 / 41
Evaluarea funct,iilor
Substitut,ie
Substitut, ie
Exemple
,a (UNIBUC)
Traian Florin S, erbanut
PDFunct,ii
2 decembrie 2014
17 / 41
Evaluarea funct,iilor
Substitut,ie
Substitut, ie
Exemple
,a (UNIBUC)
Traian Florin S, erbanut
PDFunct,ii
2 decembrie 2014
17 / 41
Evaluarea funct,iilor
Substitut,ie
Substitut, ie
Exemple
(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
,a (UNIBUC)
Traian Florin S, erbanut
PDFunct,ii
2 decembrie 2014
17 / 41
Evaluarea funct,iilor
Substitut,ie
Substitut, ie
Exemple
,a (UNIBUC)
Traian Florin S, erbanut
PDFunct,ii
2 decembrie 2014
17 / 41
Evaluarea funct,iilor
Substitut,ie
Substitut, ie simultana
Definit, ie
,a (UNIBUC)
Traian Florin S, erbanut
PDFunct,ii
2 decembrie 2014
18 / 41
Evaluarea funct,iilor
Substitut,ie
n =n
e1 = e10
,a (UNIBUC)
Traian Florin S, erbanut
PDFunct,ii
2 decembrie 2014
19 / 41
Evaluarea funct,iilor
Substitut,ie
n =n
e1 = e10
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
,a (UNIBUC)
Traian Florin S, erbanut
PDFunct,ii
2 decembrie 2014
20 / 41
Evaluarea funct,iilor
Substitut,ie
Substitut, ie
Exemplu
,a (UNIBUC)
Traian Florin S, erbanut
PDFunct,ii
2 decembrie 2014
21 / 41
Evaluarea funct,iilor
Substitut,ie
Substitut, ie
Exemplu
,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
(conv)
e e 0
fun (x : T ) e fun (x : T ) e 0
,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 .
,a (UNIBUC)
Traian Florin S, erbanut
PDFunct,ii
2 decembrie 2014
24 / 41
Evaluarea funct,iilor
Strategii de evaluare
,a (UNIBUC)
Traian Florin S, erbanut
PDFunct,ii
2 decembrie 2014
25 / 41
Evaluarea funct,iilor
Strategii de evaluare
,a (UNIBUC)
Traian Florin S, erbanut
PDFunct,ii
2 decembrie 2014
26 / 41
Evaluarea funct,iilor
Strategii de evaluare
,a (UNIBUC)
Traian Florin S, erbanut
PDFunct,ii
2 decembrie 2014
26 / 41
Evaluarea funct,iilor
Strategii de evaluare
,a (UNIBUC)
Traian Florin S, erbanut
PDFunct,ii
2 decembrie 2014
27 / 41
Evaluarea funct,iilor
Strategii de evaluare
,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 ]
,a (UNIBUC)
Traian Florin S, erbanut
PDFunct,ii
2 decembrie 2014
28 / 41
Evaluarea funct,iilor
Strategii de evaluare
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
,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
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
PDFunct,ii
2 decembrie 2014
36 / 41
Evaluarea funct,iilor
Reguli de reduct,ie
Lenevire n Maude
Ciurul lui Eratostene
PDFunct,ii
2 decembrie 2014
37 / 41
Contexte de evaluare
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
PDFunct,ii
2 decembrie 2014
38 / 41
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)
[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
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:
PDFunct,ii
2 decembrie 2014
40 / 41
::=
|
|
|
|
...
ce
(fun (x : T ) c ) e
(fun (x : T ) c [x ]) c
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