elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

1074
Paradigme de Programare S , .l. dr. ing. Mihnea Muraru [email protected] 2018–2019, semestrul 2 1 / 423

Upload: others

Post on 30-Aug-2019

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Paradigme de Programare

S, .l. dr. ing. Mihnea [email protected]

2018–2019, semestrul 2

1 / 423

Page 2: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Partea I

Introducere

2 / 423

Page 3: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Organizare

Obiective

Exemplu introductiv

Paradigme s, i limbaje

3 / 423

Page 4: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Organizare

Obiective

Exemplu introductiv

Paradigme s, i limbaje

4 / 423

Page 5: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Notare

I Teste la curs: 0,5

I Test grila: 0,5

I Laborator: 1

I Teme: 4 (3 × 1.33)

I Examen: 4

5 / 423

Page 6: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Regulament

Va rugam sa citit,i regulamentul cu atent,ie!

http://elf.cs.pub.ro/pp/19/regulament

6 / 423

Page 7: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Desfas, urarea cursului

I Recapitularea cursului anterior

I Predare

I Test din cursul anterior

I Feedback despre cursul curent (de acasa)

7 / 423

Page 8: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Organizare

Obiective

Exemplu introductiv

Paradigme s, i limbaje

8 / 423

Page 9: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Ce vom studia?

1. Modele de calculabilitate:

Diverse perspective conceptuale asupra not,iuniide calculabilitate efectiva

2. Paradigme de programare:

Influent,a perspectivei alese asupra procesuluide modelare s, i rezolvare a problemelor

3. Limbaje de programare:

Mecanisme expresive, aferente paradigmelor,cu accent pe aspectul comparativ

9 / 423

Page 10: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Ce vom studia?

1. Modele de calculabilitate:Diverse perspective conceptuale asupra not,iuniide calculabilitate efectiva

2. Paradigme de programare:

Influent,a perspectivei alese asupra procesuluide modelare s, i rezolvare a problemelor

3. Limbaje de programare:

Mecanisme expresive, aferente paradigmelor,cu accent pe aspectul comparativ

9 / 423

Page 11: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Ce vom studia?

1. Modele de calculabilitate:Diverse perspective conceptuale asupra not,iuniide calculabilitate efectiva

2. Paradigme de programare:Influent,a perspectivei alese asupra procesuluide modelare s, i rezolvare a problemelor

3. Limbaje de programare:

Mecanisme expresive, aferente paradigmelor,cu accent pe aspectul comparativ

9 / 423

Page 12: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Ce vom studia?

1. Modele de calculabilitate:Diverse perspective conceptuale asupra not,iuniide calculabilitate efectiva

2. Paradigme de programare:Influent,a perspectivei alese asupra procesuluide modelare s, i rezolvare a problemelor

3. Limbaje de programare:Mecanisme expresive, aferente paradigmelor,cu accent pe aspectul comparativ

9 / 423

Page 13: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

De ce?

The tools we use have a profound (and devious!)influence on our thinking habits, and, therefore,on our thinking abilities.

Edsger Dijkstra,How do we tell truths that might hurt

10 / 423

Page 14: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Descompunerea problemelor

Controlul complexitat,ii: descompunere s, i interfat,are

Descompunere Accent pe Rezultat

Procedurala Act,iuni ProceduriOrientata obiect Entitat,i Clase s, i obiecte

Funct,ionala Relat,ii Funct,ii în sens matematicLogica Relat,ii Predicate s, i propozit,ii

11 / 423

Page 15: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Descompunerea problemelor

Controlul complexitat,ii: descompunere s, i interfat,are

Descompunere Accent pe RezultatProcedurala Act,iuni Proceduri

Orientata obiect Entitat,i Clase s, i obiecteFunct,ionala Relat,ii Funct,ii în sens matematic

Logica Relat,ii Predicate s, i propozit,ii

11 / 423

Page 16: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Descompunerea problemelor

Controlul complexitat,ii: descompunere s, i interfat,are

Descompunere Accent pe RezultatProcedurala Act,iuni Proceduri

Orientata obiect Entitat,i Clase s, i obiecte

Funct,ionala Relat,ii Funct,ii în sens matematicLogica Relat,ii Predicate s, i propozit,ii

11 / 423

Page 17: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Descompunerea problemelor

Controlul complexitat,ii: descompunere s, i interfat,are

Descompunere Accent pe RezultatProcedurala Act,iuni Proceduri

Orientata obiect Entitat,i Clase s, i obiecteFunct,ionala Relat,ii Funct,ii în sens matematic

Logica Relat,ii Predicate s, i propozit,ii

11 / 423

Page 18: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Descompunerea problemelor

Controlul complexitat,ii: descompunere s, i interfat,are

Descompunere Accent pe RezultatProcedurala Act,iuni Proceduri

Orientata obiect Entitat,i Clase s, i obiecteFunct,ionala Relat,ii Funct,ii în sens matematic

Logica Relat,ii Predicate s, i propozit,ii

11 / 423

Page 19: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Descompunerea problemelor

Controlul complexitat,ii: descompunere s, i interfat,are

Descompunere Accent pe RezultatProcedurala Act,iuni Proceduri

Orientata obiect Entitat,i Clase s, i obiecteFunct,ionala Relat,ii Funct,ii în sens matematic

Logica Relat,ii Predicate s, i propozit,ii

11 / 423

Page 20: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

De ce? (cont.)

I Largirea spectrului de abordare a problemelor

I Identificarea perspectivei ce permite modelareasimpla a unei probleme; alegerea limbajului adecvat

I Exploatarea mecanismelor oferite de limbajelede programare (v. Dijkstra!)

I Sporirea capacitat,ii de învat,are a noi limbajes, i de adaptare la particularitat,ile s, i diferent,eledintre acestea

12 / 423

Page 21: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

De ce? (cont.)

I Largirea spectrului de abordare a problemelor

I Identificarea perspectivei ce permite modelareasimpla a unei probleme; alegerea limbajului adecvat

I Exploatarea mecanismelor oferite de limbajelede programare (v. Dijkstra!)

I Sporirea capacitat,ii de învat,are a noi limbajes, i de adaptare la particularitat,ile s, i diferent,eledintre acestea

12 / 423

Page 22: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

De ce? (cont.)

I Largirea spectrului de abordare a problemelor

I Identificarea perspectivei ce permite modelareasimpla a unei probleme; alegerea limbajului adecvat

I Exploatarea mecanismelor oferite de limbajelede programare (v. Dijkstra!)

I Sporirea capacitat,ii de învat,are a noi limbajes, i de adaptare la particularitat,ile s, i diferent,eledintre acestea

12 / 423

Page 23: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

De ce? (cont.)

I Largirea spectrului de abordare a problemelor

I Identificarea perspectivei ce permite modelareasimpla a unei probleme; alegerea limbajului adecvat

I Exploatarea mecanismelor oferite de limbajelede programare (v. Dijkstra!)

I Sporirea capacitat,ii de învat,are a noi limbajes, i de adaptare la particularitat,ile s, i diferent,eledintre acestea

12 / 423

Page 24: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Modele, paradigme, limbaje

Modelede calcu-labilitate

Mas, inaTuring

ImperativaProce-duralaC

Orientataobiect1Java

C++

Calculullambda

Funct,ionalaRacket

Haskell

Mas, inaMarkov

Asociativa

CLIPS

Mas, inalogica

LogicaProlog

Modele Paradigme Limbaje

1Original imperativa, dar se poate combina chiar cu abordarea funct,ionala 13 / 423

Page 25: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Limitele calculabilitat,ii

I Teza Church-Turing:efectiv calculabil ≡ Turing calculabil

I Echivalent,a celorlalte modele de calculabilitate,s, i a multor altora, cu Mas, ina Turing

I Exista vreun model superior ca fort,a de calcul?

14 / 423

Page 26: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Limitele calculabilitat,ii

I Teza Church-Turing:efectiv calculabil ≡ Turing calculabil

I Echivalent,a celorlalte modele de calculabilitate,s, i a multor altora, cu Mas, ina Turing

I Exista vreun model superior ca fort,a de calcul?

14 / 423

Page 27: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Limitele calculabilitat,ii

I Teza Church-Turing:efectiv calculabil ≡ Turing calculabil

I Echivalent,a celorlalte modele de calculabilitate,s, i a multor altora, cu Mas, ina Turing

I Exista vreun model superior ca fort,a de calcul?

14 / 423

Page 28: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Organizare

Obiective

Exemplu introductiv

Paradigme s, i limbaje

15 / 423

Page 29: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

O prima problema

Example 3.1.Sa se determine elementul minim dintr-un vector.

16 / 423

Page 30: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare imperativaModelul

Mas, ina Turing

. . . b b a a a a . . . Banda de intrare/ies, ire

s0s1

s2

s3 . . .

sn

Unitate de control(depoziteaza starea)

“Daca, în starea s1,capul este în dreptul simbolului b,atunci scrie a în loc, schimba starea în s2s, i deplaseaza capul spre dreapta.”

s1

Cap de citire/scriere(se deplaseaza în ambele direct,ii)

Prelucrare dupa: http://www.texample.net/tikz/examples/turing-machine-2/17 / 423

Page 31: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare imperativaModelul

Mas, ina Turing

. . . a b a a a a . . . Banda de intrare/ies, ire

s0s1

s2

s3 . . .

sn

Unitate de control(depoziteaza starea)

“Daca, în starea s1,capul este în dreptul simbolului b,atunci scrie a în loc, schimba starea în s2s, i deplaseaza capul spre dreapta.”

s2

Cap de citire/scriere(se deplaseaza în ambele direct,ii)

Prelucrare dupa: http://www.texample.net/tikz/examples/turing-machine-2/17 / 423

Page 32: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare imperativa (procedurala)Limbajul

1: procedure MINLIST(L,n)2: min← L[1]

3: i ← 24: while i ≤ n do5: if L[i ] < min then6: min← L[i ]7: end if8: i ← i + 19: end while

10: return min11: end procedure

18 / 423

Page 33: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare imperativaParadigma

I Orientare spre act,iuni s, i efectele acestora

I “Cum” se obt,ine solut,ia, pas, ii de urmat

I Atribuirea ca operat,ie fundamentala

I Programe cu stare

I Secvent,ierea instruct,iunilor

19 / 423

Page 34: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare imperativaParadigma

I Orientare spre act,iuni s, i efectele acestora

I “Cum” se obt,ine solut,ia, pas, ii de urmat

I Atribuirea ca operat,ie fundamentala

I Programe cu stare

I Secvent,ierea instruct,iunilor

19 / 423

Page 35: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare imperativaParadigma

I Orientare spre act,iuni s, i efectele acestora

I “Cum” se obt,ine solut,ia, pas, ii de urmat

I Atribuirea ca operat,ie fundamentala

I Programe cu stare

I Secvent,ierea instruct,iunilor

19 / 423

Page 36: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare imperativaParadigma

I Orientare spre act,iuni s, i efectele acestora

I “Cum” se obt,ine solut,ia, pas, ii de urmat

I Atribuirea ca operat,ie fundamentala

I Programe cu stare

I Secvent,ierea instruct,iunilor

19 / 423

Page 37: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare imperativaParadigma

I Orientare spre act,iuni s, i efectele acestora

I “Cum” se obt,ine solut,ia, pas, ii de urmat

I Atribuirea ca operat,ie fundamentala

I Programe cu stare

I Secvent,ierea instruct,iunilor

19 / 423

Page 38: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare funct,ionalaModelul

Calculul lambda

(λ x . x y )

→ y

“Pentru a aplica funct,ia λx .x

asupra parametrului actual,y , se indentifica parametrul formal, x , în corpul funct,iei, x ,

iar aparit,iile primului, x (singura), se substituiecu parametrul actual, obt,inându-se rezultatul

unui pas de evaluare.”

20 / 423

Page 39: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare funct,ionalaModelul

Calculul lambda

(λ x . x y )

→ y

“Pentru a aplica funct,ia λx .x asupra parametrului actual,y ,

se indentifica parametrul formal, x , în corpul funct,iei, x ,iar aparit,iile primului, x (singura), se substituie

cu parametrul actual, obt,inându-se rezultatulunui pas de evaluare.”

20 / 423

Page 40: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare funct,ionalaModelul

Calculul lambda

(λ x . x y )

→ y

“Pentru a aplica funct,ia λx .x asupra parametrului actual,y , se indentifica parametrul formal, x ,

în corpul funct,iei, x ,iar aparit,iile primului, x (singura), se substituie

cu parametrul actual, obt,inându-se rezultatulunui pas de evaluare.”

20 / 423

Page 41: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare funct,ionalaModelul

Calculul lambda

(λ x . x y )

→ y

“Pentru a aplica funct,ia λx .x asupra parametrului actual,y , se indentifica parametrul formal, x , în corpul funct,iei, x ,

iar aparit,iile primului, x (singura), se substituiecu parametrul actual, obt,inându-se rezultatul

unui pas de evaluare.”

20 / 423

Page 42: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare funct,ionalaModelul

Calculul lambda

(λ x . x y )

→ y

x

“Pentru a aplica funct,ia λx .x asupra parametrului actual,y , se indentifica parametrul formal, x , în corpul funct,iei, x ,

iar aparit,iile primului, x (singura),

se substituiecu parametrul actual, obt,inându-se rezultatul

unui pas de evaluare.”

20 / 423

Page 43: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare funct,ionalaModelul

Calculul lambda

(λ x . x y )

→ y

x

“Pentru a aplica funct,ia λx .x asupra parametrului actual,y , se indentifica parametrul formal, x , în corpul funct,iei, x ,

iar aparit,iile primului, x (singura), se substituiecu parametrul actual,

obt,inându-se rezultatulunui pas de evaluare.”

20 / 423

Page 44: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare funct,ionalaModelul

Calculul lambda

(λ x . x y )→ yx

“Pentru a aplica funct,ia λx .x asupra parametrului actual,y , se indentifica parametrul formal, x , în corpul funct,iei, x ,

iar aparit,iile primului, x (singura), se substituiecu parametrul actual, obt,inându-se rezultatul

unui pas de evaluare.”

20 / 423

Page 45: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare funct,ionalaLimbajul

I Racket (2 variante):

1 (define (minList1 L)

2 (if (= (length L) 1) (car L)

3 (min (car L) (minList1 (cdr L)))))

4

5 (define (minList2 L)

6 (foldl min (car L) (cdr L)))

I Haskell (aceleas, i 2 variante):1 minList1 [h] = h

2 minList1 (h : t) = min h (minList1 t)

3

4 minList2 (h : t) = foldl min h t

21 / 423

Page 46: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare funct,ionalaLimbajul

I Racket (2 variante):

1 (define (minList1 L)

2 (if (= (length L) 1) (car L)

3 (min (car L) (minList1 (cdr L)))))

4

5 (define (minList2 L)

6 (foldl min (car L) (cdr L)))

I Haskell (aceleas, i 2 variante):1 minList1 [h] = h

2 minList1 (h : t) = min h (minList1 t)

3

4 minList2 (h : t) = foldl min h t

21 / 423

Page 47: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare funct,ionalaParadigma

I Funct,ii matematice, care transforma intrarile în ies, iri

I Absent,a atribuirilor s, i a starii

I Funct,ii ca valori de prim rang (e.g., ca parametriai altor funct,ii)

I Recursivitate, în locul iterat,iei

I Compunere de funct,ii, în locul secvent,ieriiinstruct,iunilor

I Diminuarea important,ei ordinii de evaluare

I Funct,ii de ordin superior (i.e. care iau alte funct,iica parametru, e.g., foldl)

22 / 423

Page 48: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare funct,ionalaParadigma

I Funct,ii matematice, care transforma intrarile în ies, iri

I Absent,a atribuirilor s, i a starii

I Funct,ii ca valori de prim rang (e.g., ca parametriai altor funct,ii)

I Recursivitate, în locul iterat,iei

I Compunere de funct,ii, în locul secvent,ieriiinstruct,iunilor

I Diminuarea important,ei ordinii de evaluare

I Funct,ii de ordin superior (i.e. care iau alte funct,iica parametru, e.g., foldl)

22 / 423

Page 49: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare funct,ionalaParadigma

I Funct,ii matematice, care transforma intrarile în ies, iri

I Absent,a atribuirilor s, i a starii

I Funct,ii ca valori de prim rang (e.g., ca parametriai altor funct,ii)

I Recursivitate, în locul iterat,iei

I Compunere de funct,ii, în locul secvent,ieriiinstruct,iunilor

I Diminuarea important,ei ordinii de evaluare

I Funct,ii de ordin superior (i.e. care iau alte funct,iica parametru, e.g., foldl)

22 / 423

Page 50: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare funct,ionalaParadigma

I Funct,ii matematice, care transforma intrarile în ies, iri

I Absent,a atribuirilor s, i a starii

I Funct,ii ca valori de prim rang (e.g., ca parametriai altor funct,ii)

I Recursivitate, în locul iterat,iei

I Compunere de funct,ii, în locul secvent,ieriiinstruct,iunilor

I Diminuarea important,ei ordinii de evaluare

I Funct,ii de ordin superior (i.e. care iau alte funct,iica parametru, e.g., foldl)

22 / 423

Page 51: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare funct,ionalaParadigma

I Funct,ii matematice, care transforma intrarile în ies, iri

I Absent,a atribuirilor s, i a starii

I Funct,ii ca valori de prim rang (e.g., ca parametriai altor funct,ii)

I Recursivitate, în locul iterat,iei

I Compunere de funct,ii, în locul secvent,ieriiinstruct,iunilor

I Diminuarea important,ei ordinii de evaluare

I Funct,ii de ordin superior (i.e. care iau alte funct,iica parametru, e.g., foldl)

22 / 423

Page 52: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare funct,ionalaParadigma

I Funct,ii matematice, care transforma intrarile în ies, iri

I Absent,a atribuirilor s, i a starii

I Funct,ii ca valori de prim rang (e.g., ca parametriai altor funct,ii)

I Recursivitate, în locul iterat,iei

I Compunere de funct,ii, în locul secvent,ieriiinstruct,iunilor

I Diminuarea important,ei ordinii de evaluare

I Funct,ii de ordin superior (i.e. care iau alte funct,iica parametru, e.g., foldl)

22 / 423

Page 53: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare funct,ionalaParadigma

I Funct,ii matematice, care transforma intrarile în ies, iri

I Absent,a atribuirilor s, i a starii

I Funct,ii ca valori de prim rang (e.g., ca parametriai altor funct,ii)

I Recursivitate, în locul iterat,iei

I Compunere de funct,ii, în locul secvent,ieriiinstruct,iunilor

I Diminuarea important,ei ordinii de evaluare

I Funct,ii de ordin superior (i.e. care iau alte funct,iica parametru, e.g., foldl)

22 / 423

Page 54: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare logicaModelul

Logica cu predicate de ordin I

muritor (Socrate) om(Platon) ∀x .om(x)⇒muritor (x)

“La ce se poate lega variabila yastfel încât muritor (y) sa fie satisfacuta?”

y ← Socrate sau y ← Platon

23 / 423

Page 55: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare logicaModelul

Logica cu predicate de ordin I

muritor (Socrate) om(Platon) ∀x .om(x)⇒muritor (x)

“La ce se poate lega variabila yastfel încât muritor (y) sa fie satisfacuta?”

y ← Socrate sau y ← Platon

23 / 423

Page 56: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare logicaModelul

Logica cu predicate de ordin I

muritor (Socrate) om(Platon) ∀x .om(x)⇒muritor (x)

“La ce se poate lega variabila yastfel încât muritor (y) sa fie satisfacuta?”

y ← Socrate sau y ← Platon

23 / 423

Page 57: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare logicaLimbajul

I Axiome:

1. x ≤ y ⇒min(x ,y ,x)

2. y < x ⇒min(x ,y ,y)

3. minList([m],m)

4. minList([y |t ],n)∧min(x ,n,m)⇒minList([x ,y |t ],m)

I Prolog:1 min(X, Y, X) :- X =< Y.

2 min(X, Y, Y) :- Y < X.

3

4 minList([M], M).

5 minList([X, Y | T], M) :-

6 minList([Y | T], N), min(X, N, M).

24 / 423

Page 58: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare logicaLimbajul

I Axiome:1. x ≤ y ⇒min(x ,y ,x)

2. y < x ⇒min(x ,y ,y)

3. minList([m],m)

4. minList([y |t ],n)∧min(x ,n,m)⇒minList([x ,y |t ],m)

I Prolog:1 min(X, Y, X) :- X =< Y.

2 min(X, Y, Y) :- Y < X.

3

4 minList([M], M).

5 minList([X, Y | T], M) :-

6 minList([Y | T], N), min(X, N, M).

24 / 423

Page 59: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare logicaLimbajul

I Axiome:1. x ≤ y ⇒min(x ,y ,x)

2. y < x ⇒min(x ,y ,y)

3. minList([m],m)

4. minList([y |t ],n)∧min(x ,n,m)⇒minList([x ,y |t ],m)

I Prolog:1 min(X, Y, X) :- X =< Y.

2 min(X, Y, Y) :- Y < X.

3

4 minList([M], M).

5 minList([X, Y | T], M) :-

6 minList([Y | T], N), min(X, N, M).

24 / 423

Page 60: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare logicaLimbajul

I Axiome:1. x ≤ y ⇒min(x ,y ,x)

2. y < x ⇒min(x ,y ,y)

3. minList([m],m)

4. minList([y |t ],n)∧min(x ,n,m)⇒minList([x ,y |t ],m)

I Prolog:1 min(X, Y, X) :- X =< Y.

2 min(X, Y, Y) :- Y < X.

3

4 minList([M], M).

5 minList([X, Y | T], M) :-

6 minList([Y | T], N), min(X, N, M).

24 / 423

Page 61: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare logicaLimbajul

I Axiome:1. x ≤ y ⇒min(x ,y ,x)

2. y < x ⇒min(x ,y ,y)

3. minList([m],m)

4. minList([y |t ],n)∧min(x ,n,m)⇒minList([x ,y |t ],m)

I Prolog:1 min(X, Y, X) :- X =< Y.

2 min(X, Y, Y) :- Y < X.

3

4 minList([M], M).

5 minList([X, Y | T], M) :-

6 minList([Y | T], N), min(X, N, M).

24 / 423

Page 62: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare logicaLimbajul

I Axiome:1. x ≤ y ⇒min(x ,y ,x)

2. y < x ⇒min(x ,y ,y)

3. minList([m],m)

4. minList([y |t ],n)∧min(x ,n,m)⇒minList([x ,y |t ],m)

I Prolog:1 min(X, Y, X) :- X =< Y.

2 min(X, Y, Y) :- Y < X.

3

4 minList([M], M).

5 minList([X, Y | T], M) :-

6 minList([Y | T], N), min(X, N, M).

24 / 423

Page 63: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare logicaParadigma

I Formularea proprietat,ilor logice ale obiectelors, i solut,iei

I Flux de control implicit, dirijat de date

25 / 423

Page 64: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordare logicaParadigma

I Formularea proprietat,ilor logice ale obiectelors, i solut,iei

I Flux de control implicit, dirijat de date

25 / 423

Page 65: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordarile funct,ionala s, i logicaAsemanari

I Formularea proprietat,ilor solut,iei

I “Ce” trebuie obt,inut (vs. “cum” la imperativa)

I Se subsumeaza abordarii declarative,opuse celei imperative

26 / 423

Page 66: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordarile funct,ionala s, i logicaAsemanari

I Formularea proprietat,ilor solut,iei

I “Ce” trebuie obt,inut (vs. “cum” la imperativa)

I Se subsumeaza abordarii declarative,opuse celei imperative

26 / 423

Page 67: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abordarile funct,ionala s, i logicaAsemanari

I Formularea proprietat,ilor solut,iei

I “Ce” trebuie obt,inut (vs. “cum” la imperativa)

I Se subsumeaza abordarii declarative,opuse celei imperative

26 / 423

Page 68: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Organizare

Obiective

Exemplu introductiv

Paradigme s, i limbaje

27 / 423

Page 69: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Ce este o paradigma de programare?

I Un set de convent,ii care dirijeaza manieraîn care gândim programele

I Ea dicteaza modul în care:

I reprezentam dateleI operat,iile prelucreaza datele respective

I Abordarile anterioare reprezinta paradigmede programare (procedurala, funct,ionala, logica)

28 / 423

Page 70: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Ce este o paradigma de programare?

I Un set de convent,ii care dirijeaza manieraîn care gândim programele

I Ea dicteaza modul în care:

I reprezentam dateleI operat,iile prelucreaza datele respective

I Abordarile anterioare reprezinta paradigmede programare (procedurala, funct,ionala, logica)

28 / 423

Page 71: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Ce este o paradigma de programare?

I Un set de convent,ii care dirijeaza manieraîn care gândim programele

I Ea dicteaza modul în care:I reprezentam datele

I operat,iile prelucreaza datele respective

I Abordarile anterioare reprezinta paradigmede programare (procedurala, funct,ionala, logica)

28 / 423

Page 72: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Ce este o paradigma de programare?

I Un set de convent,ii care dirijeaza manieraîn care gândim programele

I Ea dicteaza modul în care:I reprezentam dateleI operat,iile prelucreaza datele respective

I Abordarile anterioare reprezinta paradigmede programare (procedurala, funct,ionala, logica)

28 / 423

Page 73: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Ce este o paradigma de programare?

I Un set de convent,ii care dirijeaza manieraîn care gândim programele

I Ea dicteaza modul în care:I reprezentam dateleI operat,iile prelucreaza datele respective

I Abordarile anterioare reprezinta paradigmede programare (procedurala, funct,ionala, logica)

28 / 423

Page 74: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Accept,ii asupra limbajelor

I Modalitate de exprimare a instruct,iunilor pe carecalculatorul le executa

I Mai important, modalitate de exprimare a unui modde gândire

29 / 423

Page 75: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Accept,ii asupra limbajelor

I Modalitate de exprimare a instruct,iunilor pe carecalculatorul le executa

I Mai important, modalitate de exprimare a unui modde gândire

29 / 423

Page 76: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Accept,ii asupra limbajelor

. . . “computer science” is not a science and [. . . ] itssignificance has little to do with computers. Thecomputer revolution is a revolution in the way wethink and in the way we express what we think.

Harold Abelson et al.,Structure and Interpretation of Computer Programs

30 / 423

Page 77: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Istoric

31 / 423

Page 78: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Câteva trasaturi

I TipareI Statica/ dinamicaI Tare/ slaba

I Ordinea de evaluare a parametrilor funct,iilorI AplicativaI Normala

I Legarea variabilelorI StaticaI Dinamica

32 / 423

Page 79: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Câteva trasaturi

I TipareI Statica/ dinamicaI Tare/ slaba

I Ordinea de evaluare a parametrilor funct,iilorI AplicativaI Normala

I Legarea variabilelorI StaticaI Dinamica

32 / 423

Page 80: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Câteva trasaturi

I TipareI Statica/ dinamicaI Tare/ slaba

I Ordinea de evaluare a parametrilor funct,iilorI AplicativaI Normala

I Legarea variabilelorI StaticaI Dinamica

32 / 423

Page 81: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Rezumat

Important,a cunoas, teriiparadigmelor s, i limbajelor de programare,

în scopul identificarii celor convenabilepentru modelarea unei probleme particulare

33 / 423

Page 82: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Partea II

Limbajul Racket

34 / 423

Page 83: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Expresii s, i evaluare

Liste s, i perechi

Tipare

Omoiconicitate s, i metaprogramare

35 / 423

Page 84: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Expresii s, i evaluare

Liste s, i perechi

Tipare

Omoiconicitate s, i metaprogramare

36 / 423

Page 85: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Expresii

(∗ (+ 1 2) 3)

evaluare−−−−−→ 9

37 / 423

Page 86: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Expresii

(∗ (+ 1 2) 3)

evaluare−−−−−→ 9

operator

37 / 423

Page 87: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Expresii

(∗ (+ 1 2) 3)

evaluare−−−−−→ 9

operator operanzi

37 / 423

Page 88: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Expresii

(∗ (+ 1 2) 3)

evaluare−−−−−→ 9

operator operanzi

operator

37 / 423

Page 89: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Expresii

(∗ (+ 1 2) 3)

evaluare−−−−−→ 9

operator operanzi

operator operanzi

37 / 423

Page 90: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Expresii

(∗ (+ 1 2) 3) evaluare−−−−−→

9

operator operanzi

operator operanzi

37 / 423

Page 91: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Expresii

(∗ (+ 1 2) 3) evaluare−−−−−→ 9

operator operanzi

operator operanzi

valoare

37 / 423

Page 92: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluarea expresiilor primitive

1. Evaluarea (reducerea) operanzilor la valori(argumente)

2. Aplicarea operatorului primitiv asupra argumentelor

Recursiv pentru subexpresii

1 (* (+ 1 2) 3)

→ (* 3 3) → 9

Racket stepper

38 / 423

Page 93: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluarea expresiilor primitive

1. Evaluarea (reducerea) operanzilor la valori(argumente)

2. Aplicarea operatorului primitiv asupra argumentelor

Recursiv pentru subexpresii

1 (* (+ 1 2) 3)

→ (* 3 3) → 9

Racket stepper

38 / 423

Page 94: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluarea expresiilor primitive

1. Evaluarea (reducerea) operanzilor la valori(argumente)

2. Aplicarea operatorului primitiv asupra argumentelor

Recursiv pentru subexpresii

1 (* (+ 1 2) 3) → (* 3 3)

→ 9

Racket stepper

38 / 423

Page 95: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluarea expresiilor primitive

1. Evaluarea (reducerea) operanzilor la valori(argumente)

2. Aplicarea operatorului primitiv asupra argumentelor

Recursiv pentru subexpresii

1 (* (+ 1 2) 3) → (* 3 3)

→ 9

Racket stepper

38 / 423

Page 96: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluarea expresiilor primitive

1. Evaluarea (reducerea) operanzilor la valori(argumente)

2. Aplicarea operatorului primitiv asupra argumentelor

Recursiv pentru subexpresii

1 (* (+ 1 2) 3) → (* 3 3) → 9

Racket stepper

38 / 423

Page 97: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluarea expresiilor primitive

1. Evaluarea (reducerea) operanzilor la valori(argumente)

2. Aplicarea operatorului primitiv asupra argumentelor

Recursiv pentru subexpresii

1 (* (+ 1 2) 3) → (* 3 3) → 9

Racket stepper

38 / 423

Page 98: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia defineScop

1 (define WIDTH 100)

I Leaga o variabila globala la valoarea unei expresii

I Atent,ie! Principial, este vorba de constante

I Avantaje:

I Lizibilitate (atribuire de sens prin numire)I Flexibilitate (modificare într-un singur loc)I Reutilizare (evitarea reproducerii multiple

a unei expresii complexe)

39 / 423

Page 99: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia defineScop

1 (define WIDTH 100)

I Leaga o variabila globala la valoarea unei expresii

I Atent,ie! Principial, este vorba de constante

I Avantaje:

I Lizibilitate (atribuire de sens prin numire)I Flexibilitate (modificare într-un singur loc)I Reutilizare (evitarea reproducerii multiple

a unei expresii complexe)

39 / 423

Page 100: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia defineScop

1 (define WIDTH 100)

I Leaga o variabila globala la valoarea unei expresii

I Atent,ie! Principial, este vorba de constante

I Avantaje:

I Lizibilitate (atribuire de sens prin numire)I Flexibilitate (modificare într-un singur loc)I Reutilizare (evitarea reproducerii multiple

a unei expresii complexe)

39 / 423

Page 101: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia defineScop

1 (define WIDTH 100)

I Leaga o variabila globala la valoarea unei expresii

I Atent,ie! Principial, este vorba de constante

I Avantaje:

I Lizibilitate (atribuire de sens prin numire)I Flexibilitate (modificare într-un singur loc)I Reutilizare (evitarea reproducerii multiple

a unei expresii complexe)

39 / 423

Page 102: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia defineScop

1 (define WIDTH 100)

I Leaga o variabila globala la valoarea unei expresii

I Atent,ie! Principial, este vorba de constante

I Avantaje:I Lizibilitate (atribuire de sens prin numire)

I Flexibilitate (modificare într-un singur loc)I Reutilizare (evitarea reproducerii multiple

a unei expresii complexe)

39 / 423

Page 103: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia defineScop

1 (define WIDTH 100)

I Leaga o variabila globala la valoarea unei expresii

I Atent,ie! Principial, este vorba de constante

I Avantaje:I Lizibilitate (atribuire de sens prin numire)I Flexibilitate (modificare într-un singur loc)

I Reutilizare (evitarea reproducerii multiplea unei expresii complexe)

39 / 423

Page 104: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia defineScop

1 (define WIDTH 100)

I Leaga o variabila globala la valoarea unei expresii

I Atent,ie! Principial, este vorba de constante

I Avantaje:I Lizibilitate (atribuire de sens prin numire)I Flexibilitate (modificare într-un singur loc)I Reutilizare (evitarea reproducerii multiple

a unei expresii complexe)

39 / 423

Page 105: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia defineEvaluare

1. La definire, se evalueaza expresia,

s, i se leaga variabila la valoarea ei

2. La utilizare, variabila se evalueaza la valoarea ei

1 (define x (* (+ 1 2) 3) )

; x <- 9

2 (+ x 10)

→ (+ 9 10)

40 / 423

Page 106: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia defineEvaluare

1. La definire, se evalueaza expresia,

s, i se leaga variabila la valoarea ei

2. La utilizare, variabila se evalueaza la valoarea ei

1 (define x (* (+ 1 2) 3) )

; x <- 9

2 (+ x 10)

→ (+ 9 10)

40 / 423

Page 107: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia defineEvaluare

1. La definire, se evalueaza expresia,s, i se leaga variabila la valoarea ei

2. La utilizare,

variabila se evalueaza la valoarea ei

1 (define x (* (+ 1 2) 3) ) ; x <- 9

2 (+ x 10)

→ (+ 9 10)

40 / 423

Page 108: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia defineEvaluare

1. La definire, se evalueaza expresia,s, i se leaga variabila la valoarea ei

2. La utilizare,

variabila se evalueaza la valoarea ei

1 (define x (* (+ 1 2) 3) ) ; x <- 9

2 (+ x 10)

→ (+ 9 10)

40 / 423

Page 109: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia defineEvaluare

1. La definire, se evalueaza expresia,s, i se leaga variabila la valoarea ei

2. La utilizare, variabila se evalueaza la valoarea ei

1 (define x (* (+ 1 2) 3) ) ; x <- 9

2 (+ x 10) → (+ 9 10)

40 / 423

Page 110: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,iiDefinire

1 (define ( increment n )

2 (+ n 1) )

1 (define ( average x y )

2 (/ (+ x y) 2) )

I Accept,ie matematica a funct,iilor — valoare calculataI Absent,a informat,iei de tip

41 / 423

Page 111: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,iiDefinire

1 (define ( increment n )

2 (+ n 1) )

1 (define ( average x y )

2 (/ (+ x y) 2) )

nume

I Accept,ie matematica a funct,iilor — valoare calculataI Absent,a informat,iei de tip

41 / 423

Page 112: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,iiDefinire

1 (define ( increment n )

2 (+ n 1) )

1 (define ( average x y )

2 (/ (+ x y) 2) )

nume parametri

I Accept,ie matematica a funct,iilor — valoare calculataI Absent,a informat,iei de tip

41 / 423

Page 113: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,iiDefinire

1 (define ( increment n )

2 (+ n 1) )

1 (define ( average x y )

2 (/ (+ x y) 2) )

nume parametri

corp (o unica expresie)

I Accept,ie matematica a funct,iilor — valoare calculataI Absent,a informat,iei de tip

41 / 423

Page 114: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,iiDefinire

1 (define ( increment n )

2 (+ n 1) )

1 (define ( average x y )

2 (/ (+ x y) 2) )

nume parametri

corp (o unica expresie)

I Accept,ie matematica a funct,iilor — valoare calculata

I Absent,a informat,iei de tip

41 / 423

Page 115: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,iiDefinire

1 (define ( increment n )

2 (+ n 1) )

1 (define ( average x y )

2 (/ (+ x y) 2) )

nume parametri

corp (o unica expresie)

I Accept,ie matematica a funct,iilor — valoare calculataI Absent,a informat,iei de tip

41 / 423

Page 116: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,iiEvaluare

Definire:

I Înregistrarea definit,iei funct,iei

1 (define (increment x)

; increment <- <functia>

2 (+ x 1))

Aplicare:

1. Evaluarea (reducerea) operanzilor

la argumente2. Substituirea argumentelor în corpul funct,iei3. Evaluarea expresiei obt,inute

1 (increment (+ 1 2) )

→ (increment 3 )

2 → (+ 3 1) → 4

42 / 423

Page 117: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,iiEvaluare

Definire:I Înregistrarea definit,iei funct,iei

1 (define (increment x) ; increment <- <functia>

2 (+ x 1))

Aplicare:

1. Evaluarea (reducerea) operanzilor

la argumente2. Substituirea argumentelor în corpul funct,iei3. Evaluarea expresiei obt,inute

1 (increment (+ 1 2) )

→ (increment 3 )

2 → (+ 3 1) → 4

42 / 423

Page 118: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,iiEvaluare

Definire:I Înregistrarea definit,iei funct,iei

1 (define (increment x) ; increment <- <functia>

2 (+ x 1))

Aplicare:1. Evaluarea (reducerea) operanzilor

la argumente

2. Substituirea argumentelor în corpul funct,iei3. Evaluarea expresiei obt,inute

1 (increment (+ 1 2) )

→ (increment 3 )

2 → (+ 3 1) → 4

42 / 423

Page 119: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,iiEvaluare

Definire:I Înregistrarea definit,iei funct,iei

1 (define (increment x) ; increment <- <functia>

2 (+ x 1))

Aplicare:1. Evaluarea (reducerea) operanzilor la argumente

2. Substituirea argumentelor în corpul funct,iei3. Evaluarea expresiei obt,inute

1 (increment (+ 1 2) ) → (increment 3 )

2 → (+ 3 1) → 4

42 / 423

Page 120: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,iiEvaluare

Definire:I Înregistrarea definit,iei funct,iei

1 (define (increment x) ; increment <- <functia>

2 (+ x 1))

Aplicare:1. Evaluarea (reducerea) operanzilor la argumente2. Substituirea argumentelor în corpul funct,iei

3. Evaluarea expresiei obt,inute

1 (increment (+ 1 2) ) → (increment 3 )

2 → (+ 3 1) → 4

42 / 423

Page 121: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,iiEvaluare

Definire:I Înregistrarea definit,iei funct,iei

1 (define (increment x) ; increment <- <functia>

2 (+ x 1))

Aplicare:1. Evaluarea (reducerea) operanzilor la argumente2. Substituirea argumentelor în corpul funct,iei

3. Evaluarea expresiei obt,inute

1 (increment (+ 1 2) ) → (increment 3 )

2 → (+ 3 1)

→ 4

42 / 423

Page 122: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,iiEvaluare

Definire:I Înregistrarea definit,iei funct,iei

1 (define (increment x) ; increment <- <functia>

2 (+ x 1))

Aplicare:1. Evaluarea (reducerea) operanzilor la argumente2. Substituirea argumentelor în corpul funct,iei3. Evaluarea expresiei obt,inute

1 (increment (+ 1 2) ) → (increment 3 )

2 → (+ 3 1)

→ 4

42 / 423

Page 123: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,iiEvaluare

Definire:I Înregistrarea definit,iei funct,iei

1 (define (increment x) ; increment <- <functia>

2 (+ x 1))

Aplicare:1. Evaluarea (reducerea) operanzilor la argumente2. Substituirea argumentelor în corpul funct,iei3. Evaluarea expresiei obt,inute

1 (increment (+ 1 2) ) → (increment 3 )

2 → (+ 3 1) → 4

42 / 423

Page 124: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia ifPrezentare

1 (if (< 1 2) (+ 3 4) (+ 5 6))

I Imaginabila în forma unei funct,ii

I Ramurile then s, i else ca operanzi

I De aici, obligativitatea prezent,ei ramurii else!

43 / 423

Page 125: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia ifPrezentare

1 (if (< 1 2) (+ 3 4) (+ 5 6))

I Imaginabila în forma unei funct,ii

I Ramurile then s, i else ca operanzi

I De aici, obligativitatea prezent,ei ramurii else!

43 / 423

Page 126: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia ifPrezentare

1 (if (< 1 2) (+ 3 4) (+ 5 6))

I Imaginabila în forma unei funct,ii

I Ramurile then s, i else ca operanzi

I De aici, obligativitatea prezent,ei ramurii else!

43 / 423

Page 127: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia ifEvaluare

1. Evaluarea condit,iei

2. Înlocuirea întregii expresii if cu ramura potrivita

3. Evaluarea expresiei obt,inute

Ordine diferita de evaluare, fat,a de funct,iile obis, nuite!

1 (if (< 1 2) (+ 3 4) (+ 5 6))

2 → (if true (+ 3 4) (+ 5 6))

3 → (+ 3 4) → 7

44 / 423

Page 128: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia ifEvaluare

1. Evaluarea condit,iei

2. Înlocuirea întregii expresii if cu ramura potrivita

3. Evaluarea expresiei obt,inute

Ordine diferita de evaluare, fat,a de funct,iile obis, nuite!

1 (if (< 1 2) (+ 3 4) (+ 5 6))

2 → (if true (+ 3 4) (+ 5 6))

3 → (+ 3 4) → 7

44 / 423

Page 129: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia ifEvaluare

1. Evaluarea condit,iei

2. Înlocuirea întregii expresii if cu ramura potrivita

3. Evaluarea expresiei obt,inute

Ordine diferita de evaluare, fat,a de funct,iile obis, nuite!

1 (if (< 1 2) (+ 3 4) (+ 5 6))

2 → (if true (+ 3 4) (+ 5 6))

3 → (+ 3 4) → 7

44 / 423

Page 130: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia ifEvaluare

1. Evaluarea condit,iei

2. Înlocuirea întregii expresii if cu ramura potrivita

3. Evaluarea expresiei obt,inute

Ordine diferita de evaluare, fat,a de funct,iile obis, nuite!

1 (if (< 1 2) (+ 3 4) (+ 5 6))

2 → (if true (+ 3 4) (+ 5 6))

3 → (+ 3 4) → 7

44 / 423

Page 131: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia ifEvaluare

1. Evaluarea condit,iei

2. Înlocuirea întregii expresii if cu ramura potrivita

3. Evaluarea expresiei obt,inute

Ordine diferita de evaluare, fat,a de funct,iile obis, nuite!

1 (if (< 1 2) (+ 3 4) (+ 5 6))

2 → (if true (+ 3 4) (+ 5 6))

3 → (+ 3 4)

→ 7

44 / 423

Page 132: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia ifEvaluare

1. Evaluarea condit,iei

2. Înlocuirea întregii expresii if cu ramura potrivita

3. Evaluarea expresiei obt,inute

Ordine diferita de evaluare, fat,a de funct,iile obis, nuite!

1 (if (< 1 2) (+ 3 4) (+ 5 6))

2 → (if true (+ 3 4) (+ 5 6))

3 → (+ 3 4)

→ 7

44 / 423

Page 133: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia ifEvaluare

1. Evaluarea condit,iei

2. Înlocuirea întregii expresii if cu ramura potrivita

3. Evaluarea expresiei obt,inute

Ordine diferita de evaluare, fat,a de funct,iile obis, nuite!

1 (if (< 1 2) (+ 3 4) (+ 5 6))

2 → (if true (+ 3 4) (+ 5 6))

3 → (+ 3 4) → 7

44 / 423

Page 134: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia ifEvaluare

1. Evaluarea condit,iei

2. Înlocuirea întregii expresii if cu ramura potrivita

3. Evaluarea expresiei obt,inute

Ordine diferita de evaluare, fat,a de funct,iile obis, nuite!

1 (if (< 1 2) (+ 3 4) (+ 5 6))

2 → (if true (+ 3 4) (+ 5 6))

3 → (+ 3 4) → 7

44 / 423

Page 135: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Expresii s, i evaluare

Liste s, i perechi

Tipare

Omoiconicitate s, i metaprogramare

45 / 423

Page 136: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ListeLiterali

I Aspectul de lista al aplicat,iilor operatorilor

(+ 1 2)

I Ce s-ar întâmpla daca am înlocui + cu 0?

(0 1 2)

Eroare! 0 nu este operator!

I Solut,ie: împiedicarea evaluarii, cu quote

(quote (0 1 2)) sau ’(0 1 2)

46 / 423

Page 137: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ListeLiterali

I Aspectul de lista al aplicat,iilor operatorilor

(+ 1 2)

I Ce s-ar întâmpla daca am înlocui + cu 0?

(0 1 2)

Eroare! 0 nu este operator!

I Solut,ie: împiedicarea evaluarii, cu quote

(quote (0 1 2)) sau ’(0 1 2)

46 / 423

Page 138: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ListeLiterali

I Aspectul de lista al aplicat,iilor operatorilor

(+ 1 2)

I Ce s-ar întâmpla daca am înlocui + cu 0?

(0 1 2)

Eroare! 0 nu este operator!

I Solut,ie: împiedicarea evaluarii, cu quote

(quote (0 1 2)) sau ’(0 1 2)

46 / 423

Page 139: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ListeLiterali

I Aspectul de lista al aplicat,iilor operatorilor

(+ 1 2)

I Ce s-ar întâmpla daca am înlocui + cu 0?

(0 1 2)

Eroare! 0 nu este operator!

I Solut,ie: împiedicarea evaluarii, cu quote

(quote (0 1 2)) sau ’(0 1 2)

46 / 423

Page 140: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ListeStructura

I Structura recursiva

I O lista se obt,ine prin introducerea unui element(head) în vârful altei liste (tail)

(cons 0 ’(1 2)) → ’(0 1 2)

I Cazul de baza: lista vida, ’()

I Alternativa de construct,ie: funct,ia list

(list 0 1 2)

I Selectori(car ’(0 1 2)) → 0(cdr ’(0 1 2)) → ’(1 2)

47 / 423

Page 141: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ListeStructura

I Structura recursivaI O lista se obt,ine prin introducerea unui element

(head) în vârful altei liste (tail)

(cons 0 ’(1 2)) → ’(0 1 2)

I Cazul de baza: lista vida, ’()

I Alternativa de construct,ie: funct,ia list

(list 0 1 2)

I Selectori(car ’(0 1 2)) → 0(cdr ’(0 1 2)) → ’(1 2)

47 / 423

Page 142: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ListeStructura

I Structura recursivaI O lista se obt,ine prin introducerea unui element

(head) în vârful altei liste (tail)

(cons 0 ’(1 2)) → ’(0 1 2)

I Cazul de baza: lista vida, ’()

I Alternativa de construct,ie: funct,ia list

(list 0 1 2)

I Selectori(car ’(0 1 2)) → 0(cdr ’(0 1 2)) → ’(1 2)

47 / 423

Page 143: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ListeStructura

I Structura recursivaI O lista se obt,ine prin introducerea unui element

(head) în vârful altei liste (tail)

(cons 0 ’(1 2)) → ’(0 1 2)

I Cazul de baza: lista vida, ’()

I Alternativa de construct,ie: funct,ia list

(list 0 1 2)

I Selectori(car ’(0 1 2)) → 0(cdr ’(0 1 2)) → ’(1 2)

47 / 423

Page 144: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ListeStructura

I Structura recursivaI O lista se obt,ine prin introducerea unui element

(head) în vârful altei liste (tail)

(cons 0 ’(1 2)) → ’(0 1 2)

I Cazul de baza: lista vida, ’()

I Alternativa de construct,ie: funct,ia list

(list 0 1 2)

I Selectori(car ’(0 1 2)) → 0(cdr ’(0 1 2)) → ’(1 2)

47 / 423

Page 145: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ListeFunct,ii

I Exploatarea structurii recursive de funct,iile pe liste

I Exemplu: minimul unei liste nevide (v. slide-ul 21)

I Axiome, pornind de la un tip de date abstract List ,cu constructorii de baza ′() s, i cons:

(minList (cons e ′())) = e(minList (cons e L)) = (min e (minList (cdr L)))

I Implementare

1 (define (minList1 L)

2 (if (= (length L) 1) (car L)

3 (min (car L) (minList1 (cdr L)))))

I Traducere fidela a axiomelor unui TDAîntr-un program funct,ional!

48 / 423

Page 146: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ListeFunct,ii

I Exploatarea structurii recursive de funct,iile pe liste

I Exemplu: minimul unei liste nevide (v. slide-ul 21)

I Axiome, pornind de la un tip de date abstract List ,cu constructorii de baza ′() s, i cons:

(minList (cons e ′())) = e(minList (cons e L)) = (min e (minList (cdr L)))

I Implementare

1 (define (minList1 L)

2 (if (= (length L) 1) (car L)

3 (min (car L) (minList1 (cdr L)))))

I Traducere fidela a axiomelor unui TDAîntr-un program funct,ional!

48 / 423

Page 147: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ListeFunct,ii

I Exploatarea structurii recursive de funct,iile pe liste

I Exemplu: minimul unei liste nevide (v. slide-ul 21)I Axiome, pornind de la un tip de date abstract List ,

cu constructorii de baza ′() s, i cons:

(minList (cons e ′())) = e(minList (cons e L)) = (min e (minList (cdr L)))

I Implementare

1 (define (minList1 L)

2 (if (= (length L) 1) (car L)

3 (min (car L) (minList1 (cdr L)))))

I Traducere fidela a axiomelor unui TDAîntr-un program funct,ional!

48 / 423

Page 148: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ListeFunct,ii

I Exploatarea structurii recursive de funct,iile pe liste

I Exemplu: minimul unei liste nevide (v. slide-ul 21)I Axiome, pornind de la un tip de date abstract List ,

cu constructorii de baza ′() s, i cons:

(minList (cons e ′())) = e(minList (cons e L)) = (min e (minList (cdr L)))

I Implementare

1 (define (minList1 L)

2 (if (= (length L) 1) (car L)

3 (min (car L) (minList1 (cdr L)))))

I Traducere fidela a axiomelor unui TDAîntr-un program funct,ional!

48 / 423

Page 149: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ListeFunct,ii

I Exploatarea structurii recursive de funct,iile pe liste

I Exemplu: minimul unei liste nevide (v. slide-ul 21)I Axiome, pornind de la un tip de date abstract List ,

cu constructorii de baza ′() s, i cons:

(minList (cons e ′())) = e(minList (cons e L)) = (min e (minList (cdr L)))

I Implementare

1 (define (minList1 L)

2 (if (= (length L) 1) (car L)

3 (min (car L) (minList1 (cdr L)))))

I Traducere fidela a axiomelor unui TDAîntr-un program funct,ional!

48 / 423

Page 150: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Perechi

I Intern, lista ≡ pereche head-tail

I cons, aplicabil asupra oricaror doi operanzi,pentru generarea unei perechi cu punct (dotted pair)

(cons 0 1) → ’(0 . 1)

’(0 1 2) ≡ ’(0 . (1 . (2 . ())))

I Toretic, perechi reprezentabile ca funct,ii!(vom vedea mai târziu). De fapt, . . .

49 / 423

Page 151: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Perechi

I Intern, lista ≡ pereche head-tail

I cons, aplicabil asupra oricaror doi operanzi,pentru generarea unei perechi cu punct (dotted pair)

(cons 0 1) → ’(0 . 1)

’(0 1 2) ≡ ’(0 . (1 . (2 . ())))

I Toretic, perechi reprezentabile ca funct,ii!(vom vedea mai târziu). De fapt, . . .

49 / 423

Page 152: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Perechi

I Intern, lista ≡ pereche head-tail

I cons, aplicabil asupra oricaror doi operanzi,pentru generarea unei perechi cu punct (dotted pair)

(cons 0 1) → ’(0 . 1)’(0 1 2) ≡ ’(0 . (1 . (2 . ())))

I Toretic, perechi reprezentabile ca funct,ii!(vom vedea mai târziu).

De fapt, . . .

49 / 423

Page 153: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Perechi

I Intern, lista ≡ pereche head-tail

I cons, aplicabil asupra oricaror doi operanzi,pentru generarea unei perechi cu punct (dotted pair)

(cons 0 1) → ’(0 . 1)’(0 1 2) ≡ ’(0 . (1 . (2 . ())))

I Toretic, perechi reprezentabile ca funct,ii!(vom vedea mai târziu).

De fapt, . . .

49 / 423

Page 154: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Perechi

I Intern, lista ≡ pereche head-tail

I cons, aplicabil asupra oricaror doi operanzi,pentru generarea unei perechi cu punct (dotted pair)

(cons 0 1) → ’(0 . 1)’(0 1 2) ≡ ’(0 . (1 . (2 . ())))

I Toretic, perechi reprezentabile ca funct,ii!(vom vedea mai târziu). De fapt, . . .

49 / 423

Page 155: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Universalitatea funct,iilor

I . . . , orice limbaj prevazut exclusiv cu funct,iis, i fara tipuri predefinite este la fel de expresivca orice alt limbaj (în limitele tezei Church-Turing)

I Majoritatea tipurilor uzuale, codificabile directprin intermediul funct,iilor

true

falseBool

(♣ . ♦)

(♥ . ♠)

Pair

(♣ ♦ ♥)

(♥ ♠)List

Functions

50 / 423

Page 156: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Universalitatea funct,iilor

I . . . , orice limbaj prevazut exclusiv cu funct,iis, i fara tipuri predefinite este la fel de expresivca orice alt limbaj (în limitele tezei Church-Turing)

I Majoritatea tipurilor uzuale, codificabile directprin intermediul funct,iilor

true

falseBool

(♣ . ♦)

(♥ . ♠)

Pair

(♣ ♦ ♥)

(♥ ♠)List

Functions

50 / 423

Page 157: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Universalitatea funct,iilor

I . . . , orice limbaj prevazut exclusiv cu funct,iis, i fara tipuri predefinite este la fel de expresivca orice alt limbaj (în limitele tezei Church-Turing)

I Majoritatea tipurilor uzuale, codificabile directprin intermediul funct,iilor

true

falseBool

(♣ . ♦)

(♥ . ♠)

Pair

(♣ ♦ ♥)

(♥ ♠)List

Functions

50 / 423

Page 158: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Expresii s, i evaluare

Liste s, i perechi

Tipare

Omoiconicitate s, i metaprogramare

51 / 423

Page 159: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Caracteristici

I Tipare = modalitatea de definire, manipulares, i verificare a tipurilor dintr-un limbaj

I Existent,a unor tipuri predefinite în Racket(boolean, caracter, numar etc.)

I Întrebari:

I Când se realizeaza verificarea?I Cât de flexibile sunt regulile de tipare?

52 / 423

Page 160: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Caracteristici

I Tipare = modalitatea de definire, manipulares, i verificare a tipurilor dintr-un limbaj

I Existent,a unor tipuri predefinite în Racket(boolean, caracter, numar etc.)

I Întrebari:

I Când se realizeaza verificarea?I Cât de flexibile sunt regulile de tipare?

52 / 423

Page 161: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Caracteristici

I Tipare = modalitatea de definire, manipulares, i verificare a tipurilor dintr-un limbaj

I Existent,a unor tipuri predefinite în Racket(boolean, caracter, numar etc.)

I Întrebari:

I Când se realizeaza verificarea?I Cât de flexibile sunt regulile de tipare?

52 / 423

Page 162: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Caracteristici

I Tipare = modalitatea de definire, manipulares, i verificare a tipurilor dintr-un limbaj

I Existent,a unor tipuri predefinite în Racket(boolean, caracter, numar etc.)

I Întrebari:I Când se realizeaza verificarea?

I Cât de flexibile sunt regulile de tipare?

52 / 423

Page 163: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Caracteristici

I Tipare = modalitatea de definire, manipulares, i verificare a tipurilor dintr-un limbaj

I Existent,a unor tipuri predefinite în Racket(boolean, caracter, numar etc.)

I Întrebari:I Când se realizeaza verificarea?I Cât de flexibile sunt regulile de tipare?

52 / 423

Page 164: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Flexibilitatea regulilor

I Ce produce evaluarea urmatoarei expresii?

(+ 1 "OK")

I Criteriu: flexibilitatea în agregarea valorilor de tipuridiferite

I Racket: verificare rigida — tipare tare (strong)

I Raspuns: eroare!

I Alternativa în alte limbaje — tipare slaba (weak)

I Visual Basic: 1 + "23" = 24

I JavaScript: 1 + "23" = "123"

53 / 423

Page 165: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Flexibilitatea regulilor

I Ce produce evaluarea urmatoarei expresii?

(+ 1 "OK")

I Criteriu: flexibilitatea în agregarea valorilor de tipuridiferite

I Racket: verificare rigida — tipare tare (strong)

I Raspuns: eroare!

I Alternativa în alte limbaje — tipare slaba (weak)

I Visual Basic: 1 + "23" = 24

I JavaScript: 1 + "23" = "123"

53 / 423

Page 166: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Flexibilitatea regulilor

I Ce produce evaluarea urmatoarei expresii?

(+ 1 "OK")

I Criteriu: flexibilitatea în agregarea valorilor de tipuridiferite

I Racket: verificare rigida — tipare tare (strong)

I Raspuns: eroare!

I Alternativa în alte limbaje — tipare slaba (weak)

I Visual Basic: 1 + "23" = 24

I JavaScript: 1 + "23" = "123"

53 / 423

Page 167: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Flexibilitatea regulilor

I Ce produce evaluarea urmatoarei expresii?

(+ 1 "OK")

I Criteriu: flexibilitatea în agregarea valorilor de tipuridiferite

I Racket: verificare rigida — tipare tare (strong)

I Raspuns: eroare!

I Alternativa în alte limbaje — tipare slaba (weak)

I Visual Basic: 1 + "23" = 24

I JavaScript: 1 + "23" = "123"

53 / 423

Page 168: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Flexibilitatea regulilor

I Ce produce evaluarea urmatoarei expresii?

(+ 1 "OK")

I Criteriu: flexibilitatea în agregarea valorilor de tipuridiferite

I Racket: verificare rigida — tipare tare (strong)

I Raspuns: eroare!

I Alternativa în alte limbaje — tipare slaba (weak)

I Visual Basic: 1 + "23" = 24

I JavaScript: 1 + "23" = "123"

53 / 423

Page 169: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Flexibilitatea regulilor

I Ce produce evaluarea urmatoarei expresii?

(+ 1 "OK")

I Criteriu: flexibilitatea în agregarea valorilor de tipuridiferite

I Racket: verificare rigida — tipare tare (strong)

I Raspuns: eroare!

I Alternativa în alte limbaje — tipare slaba (weak)I Visual Basic: 1 + "23" = 24

I JavaScript: 1 + "23" = "123"

53 / 423

Page 170: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Flexibilitatea regulilor

I Ce produce evaluarea urmatoarei expresii?

(+ 1 "OK")

I Criteriu: flexibilitatea în agregarea valorilor de tipuridiferite

I Racket: verificare rigida — tipare tare (strong)

I Raspuns: eroare!

I Alternativa în alte limbaje — tipare slaba (weak)I Visual Basic: 1 + "23" = 24

I JavaScript: 1 + "23" = "123"

53 / 423

Page 171: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Momentul verificarii

I Ce produce evaluarea urmatoarei expresii?

(+ 1 (if condition 2 "OK"))

I Racket: verificare în momentul aplicarii unui operatorpredefinit — tipare dinamica

I Raspunsul depinde de valoarea lui condition:

I true: 3I false: Eroare, imposibilitatea adunarii unui numar

cu un s, ir

I Posibilitatea evaluarii cu succes a unei expresiice cont,ine subexpresii eronate, cât timp celedin urma nu sunt evaluate

54 / 423

Page 172: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Momentul verificarii

I Ce produce evaluarea urmatoarei expresii?

(+ 1 (if condition 2 "OK"))

I Racket: verificare în momentul aplicarii unui operatorpredefinit — tipare dinamica

I Raspunsul depinde de valoarea lui condition:

I true: 3I false: Eroare, imposibilitatea adunarii unui numar

cu un s, ir

I Posibilitatea evaluarii cu succes a unei expresiice cont,ine subexpresii eronate, cât timp celedin urma nu sunt evaluate

54 / 423

Page 173: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Momentul verificarii

I Ce produce evaluarea urmatoarei expresii?

(+ 1 (if condition 2 "OK"))

I Racket: verificare în momentul aplicarii unui operatorpredefinit — tipare dinamica

I Raspunsul depinde de valoarea lui condition:

I true: 3I false: Eroare, imposibilitatea adunarii unui numar

cu un s, ir

I Posibilitatea evaluarii cu succes a unei expresiice cont,ine subexpresii eronate, cât timp celedin urma nu sunt evaluate

54 / 423

Page 174: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Momentul verificarii

I Ce produce evaluarea urmatoarei expresii?

(+ 1 (if condition 2 "OK"))

I Racket: verificare în momentul aplicarii unui operatorpredefinit — tipare dinamica

I Raspunsul depinde de valoarea lui condition:I true: 3

I false: Eroare, imposibilitatea adunarii unui numarcu un s, ir

I Posibilitatea evaluarii cu succes a unei expresiice cont,ine subexpresii eronate, cât timp celedin urma nu sunt evaluate

54 / 423

Page 175: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Momentul verificarii

I Ce produce evaluarea urmatoarei expresii?

(+ 1 (if condition 2 "OK"))

I Racket: verificare în momentul aplicarii unui operatorpredefinit — tipare dinamica

I Raspunsul depinde de valoarea lui condition:I true: 3I false: Eroare, imposibilitatea adunarii unui numar

cu un s, ir

I Posibilitatea evaluarii cu succes a unei expresiice cont,ine subexpresii eronate, cât timp celedin urma nu sunt evaluate

54 / 423

Page 176: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Momentul verificarii

I Ce produce evaluarea urmatoarei expresii?

(+ 1 (if condition 2 "OK"))

I Racket: verificare în momentul aplicarii unui operatorpredefinit — tipare dinamica

I Raspunsul depinde de valoarea lui condition:I true: 3I false: Eroare, imposibilitatea adunarii unui numar

cu un s, ir

I Posibilitatea evaluarii cu succes a unei expresiice cont,ine subexpresii eronate, cât timp celedin urma nu sunt evaluate

54 / 423

Page 177: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Expresii s, i evaluare

Liste s, i perechi

Tipare

Omoiconicitate s, i metaprogramare

55 / 423

Page 178: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Omoiconicitate s, i metaprogramare

I Corepondent,a între sintaxa programuluis, i strucura de date fundamentala (lista)

I Racket — limbaj omoiconic(homo = aceeas, i, icon = reprezentare)

I Manipularea listelor ∼ manipularea codului

I Metaprogramare: posibilitatea programuluide a se autorescrie

56 / 423

Page 179: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Omoiconicitate s, i metaprogramare

I Corepondent,a între sintaxa programuluis, i strucura de date fundamentala (lista)

I Racket — limbaj omoiconic(homo = aceeas, i, icon = reprezentare)

I Manipularea listelor ∼ manipularea codului

I Metaprogramare: posibilitatea programuluide a se autorescrie

56 / 423

Page 180: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Omoiconicitate s, i metaprogramare

I Corepondent,a între sintaxa programuluis, i strucura de date fundamentala (lista)

I Racket — limbaj omoiconic(homo = aceeas, i, icon = reprezentare)

I Manipularea listelor ∼ manipularea codului

I Metaprogramare: posibilitatea programuluide a se autorescrie

56 / 423

Page 181: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Omoiconicitate s, i metaprogramare

I Corepondent,a între sintaxa programuluis, i strucura de date fundamentala (lista)

I Racket — limbaj omoiconic(homo = aceeas, i, icon = reprezentare)

I Manipularea listelor ∼ manipularea codului

I Metaprogramare: posibilitatea programuluide a se autorescrie

56 / 423

Page 182: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemplu de metaprogramare

1 (define plus (list '+ 3 2))

; '(+ 3 2)

2 (eval plus) ; 5

3

4 (define minus (cons '- (cdr plus))) ; '(- 3 2)

5 (eval minus) ; 1

Fort,area evaluarii de catre eval

57 / 423

Page 183: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemplu de metaprogramare

1 (define plus (list '+ 3 2)) ; '(+ 3 2)

2 (eval plus) ; 5

3

4 (define minus (cons '- (cdr plus))) ; '(- 3 2)

5 (eval minus) ; 1

Fort,area evaluarii de catre eval

57 / 423

Page 184: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemplu de metaprogramare

1 (define plus (list '+ 3 2)) ; '(+ 3 2)

2 (eval plus) ; 5

3

4 (define minus (cons '- (cdr plus))) ; '(- 3 2)

5 (eval minus) ; 1

Fort,area evaluarii de catre eval

57 / 423

Page 185: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemplu de metaprogramare

1 (define plus (list '+ 3 2)) ; '(+ 3 2)

2 (eval plus) ; 5

3

4 (define minus (cons '- (cdr plus)))

; '(- 3 2)

5 (eval minus) ; 1

Fort,area evaluarii de catre eval

57 / 423

Page 186: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemplu de metaprogramare

1 (define plus (list '+ 3 2)) ; '(+ 3 2)

2 (eval plus) ; 5

3

4 (define minus (cons '- (cdr plus))) ; '(- 3 2)

5 (eval minus) ; 1

Fort,area evaluarii de catre eval

57 / 423

Page 187: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemplu de metaprogramare

1 (define plus (list '+ 3 2)) ; '(+ 3 2)

2 (eval plus) ; 5

3

4 (define minus (cons '- (cdr plus))) ; '(- 3 2)

5 (eval minus) ; 1

Fort,area evaluarii de catre eval

57 / 423

Page 188: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemplu de metaprogramare

1 (define plus (list '+ 3 2)) ; '(+ 3 2)

2 (eval plus) ; 5

3

4 (define minus (cons '- (cdr plus))) ; '(- 3 2)

5 (eval minus) ; 1

Fort,area evaluarii de catre eval

57 / 423

Page 189: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Rezumat

I Limbaj omoiconic

I Evaluare bazata pe substitut,ie textuala

I Tipare dinamica s, i tare

58 / 423

Page 190: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Partea III

Recursivitate

59 / 423

Page 191: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Introducere

Tipuri de recursivitate

Specificul recursivitat,ii pe coada

60 / 423

Page 192: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Introducere

Tipuri de recursivitate

Specificul recursivitat,ii pe coada

61 / 423

Page 193: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate

I Componenta fundamentala a paradigmei funct,ionale

I Substitut pentru iterarea clasica (for, while etc.),în absent,a starii

I Forma de wishful thinking: “Consider rezolvatasubproblema s, i ma gândesc la cum sa rezolvproblema”

62 / 423

Page 194: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate

I Componenta fundamentala a paradigmei funct,ionale

I Substitut pentru iterarea clasica (for, while etc.),în absent,a starii

I Forma de wishful thinking: “Consider rezolvatasubproblema s, i ma gândesc la cum sa rezolvproblema”

62 / 423

Page 195: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate

I Componenta fundamentala a paradigmei funct,ionale

I Substitut pentru iterarea clasica (for, while etc.),în absent,a starii

I Forma de wishful thinking: “Consider rezolvatasubproblema s, i ma gândesc la cum sa rezolvproblema”

62 / 423

Page 196: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Introducere

Tipuri de recursivitate

Specificul recursivitat,ii pe coada

63 / 423

Page 197: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia factorialRecursivitate pe stiva, liniara

5 (define (fact-stack n)

6 (if (= n 1)

7 1

8 (* n (fact-stack (- n 1)))))

1 (fact-stack 3)

2 → (* 3 (fact-stack 2) )

3 → (* 3 (* 2 (fact-stack 1) ) )

4 → (* 3 (* 2 1 ) )

5 → (* 3 2 )

6 → 6

Exemple preluate din: Abelson and Sussman (1996)

6

Stiva procesului

2

1

64 / 423

Page 198: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia factorialRecursivitate pe stiva, liniara

5 (define (fact-stack n)

6 (if (= n 1)

7 1

8 (* n (fact-stack (- n 1)))))

1 (fact-stack 3)

2 → (* 3 (fact-stack 2) )

3 → (* 3 (* 2 (fact-stack 1) ) )

4 → (* 3 (* 2 1 ) )

5 → (* 3 2 )

6 → 6

Exemple preluate din: Abelson and Sussman (1996)

3

Stiva procesului

2

1

64 / 423

Page 199: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia factorialRecursivitate pe stiva, liniara

5 (define (fact-stack n)

6 (if (= n 1)

7 1

8 (* n (fact-stack (- n 1)))))

1 (fact-stack 3)

2 → (* 3 (fact-stack 2) )

3 → (* 3 (* 2 (fact-stack 1) ) )

4 → (* 3 (* 2 1 ) )

5 → (* 3 2 )

6 → 6

Exemple preluate din: Abelson and Sussman (1996)

3

Stiva procesului

2

1

64 / 423

Page 200: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia factorialRecursivitate pe stiva, liniara

5 (define (fact-stack n)

6 (if (= n 1)

7 1

8 (* n (fact-stack (- n 1)))))

1 (fact-stack 3)

2 → (* 3 (fact-stack 2) )

3 → (* 3 (* 2 (fact-stack 1) ) )

4 → (* 3 (* 2 1 ) )

5 → (* 3 2 )

6 → 6

Exemple preluate din: Abelson and Sussman (1996)

3

Stiva procesului

2

1

64 / 423

Page 201: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia factorialRecursivitate pe stiva, liniara

5 (define (fact-stack n)

6 (if (= n 1)

7 1

8 (* n (fact-stack (- n 1)))))

1 (fact-stack 3)

2 → (* 3 (fact-stack 2) )

3 → (* 3 (* 2 (fact-stack 1) ) )

4 → (* 3 (* 2 1 ) )

5 → (* 3 2 )

6 → 6

Exemple preluate din: Abelson and Sussman (1996)

3

Stiva procesului

2

1

64 / 423

Page 202: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia factorialRecursivitate pe stiva, liniara

5 (define (fact-stack n)

6 (if (= n 1)

7 1

8 (* n (fact-stack (- n 1)))))

1 (fact-stack 3)

2 → (* 3 (fact-stack 2) )

3 → (* 3 (* 2 (fact-stack 1) ) )

4 → (* 3 (* 2 1 ) )

5 → (* 3 2 )

6 → 6

Exemple preluate din: Abelson and Sussman (1996)

3

Stiva procesului

2

1

64 / 423

Page 203: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia factorialRecursivitate pe stiva, liniara

5 (define (fact-stack n)

6 (if (= n 1)

7 1

8 (* n (fact-stack (- n 1)))))

1 (fact-stack 3)

2 → (* 3 (fact-stack 2) )

3 → (* 3 (* 2 (fact-stack 1) ) )

4 → (* 3 (* 2 1 ) )

5 → (* 3 2 )

6 → 6

Exemple preluate din: Abelson and Sussman (1996)

3

Stiva procesului

2

1

64 / 423

Page 204: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia factorialRecursivitate pe stiva, liniara

5 (define (fact-stack n)

6 (if (= n 1)

7 1

8 (* n (fact-stack (- n 1)))))

1 (fact-stack 3)

2 → (* 3 (fact-stack 2) )

3 → (* 3 (* 2 (fact-stack 1) ) )

4 → (* 3 (* 2 1 ) )

5 → (* 3 2 )

6 → 6

Exemple preluate din: Abelson and Sussman (1996)

3

Stiva procesului

2

1

64 / 423

Page 205: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia factorialRecursivitate pe stiva, liniara

5 (define (fact-stack n)

6 (if (= n 1)

7 1

8 (* n (fact-stack (- n 1)))))

1 (fact-stack 3)

2 → (* 3 (fact-stack 2) )

3 → (* 3 (* 2 (fact-stack 1) ) )

4 → (* 3 (* 2 1 ) )

5 → (* 3 2 )

6 → 6

Exemple preluate din: Abelson and Sussman (1996)

3

Stiva procesului

2

1

64 / 423

Page 206: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia factorialRecursivitate pe stiva, liniara

5 (define (fact-stack n)

6 (if (= n 1)

7 1

8 (* n (fact-stack (- n 1)))))

1 (fact-stack 3)

2 → (* 3 (fact-stack 2) )

3 → (* 3 (* 2 (fact-stack 1) ) )

4 → (* 3 (* 2 1 ) )

5 → (* 3 2 )

6 → 6

Exemple preluate din: Abelson and Sussman (1996)

3

Stiva procesului

2

1

64 / 423

Page 207: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia factorialRecursivitate pe stiva, liniara

5 (define (fact-stack n)

6 (if (= n 1)

7 1

8 (* n (fact-stack (- n 1)))))

1 (fact-stack 3)

2 → (* 3 (fact-stack 2) )

3 → (* 3 (* 2 (fact-stack 1) ) )

4 → (* 3 (* 2 1 ) )

5 → (* 3 2 )

6 → 6

Exemple preluate din: Abelson and Sussman (1996)

6

Stiva procesului

2

1

64 / 423

Page 208: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe stiva, liniara

I Depunerea pe stiva a unor valori pe avansulîn recursivitate

I Utilizarea acestora pentru calculul propriu-zis,pe revenirea din recursivitate

I Spat,iul ocupat pe stiva: Θ(n)

I Numarul de operat,ii: Θ(n)

I Informat,ie “ascunsa”, implicita, despre stare

65 / 423

Page 209: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe stiva, liniara

I Depunerea pe stiva a unor valori pe avansulîn recursivitate

I Utilizarea acestora pentru calculul propriu-zis,pe revenirea din recursivitate

I Spat,iul ocupat pe stiva: Θ(n)

I Numarul de operat,ii: Θ(n)

I Informat,ie “ascunsa”, implicita, despre stare

65 / 423

Page 210: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe stiva, liniara

I Depunerea pe stiva a unor valori pe avansulîn recursivitate

I Utilizarea acestora pentru calculul propriu-zis,pe revenirea din recursivitate

I Spat,iul ocupat pe stiva: Θ(n)

I Numarul de operat,ii: Θ(n)

I Informat,ie “ascunsa”, implicita, despre stare

65 / 423

Page 211: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe stiva, liniara

I Depunerea pe stiva a unor valori pe avansulîn recursivitate

I Utilizarea acestora pentru calculul propriu-zis,pe revenirea din recursivitate

I Spat,iul ocupat pe stiva: Θ(n)

I Numarul de operat,ii: Θ(n)

I Informat,ie “ascunsa”, implicita, despre stare

65 / 423

Page 212: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe stiva, liniara

I Depunerea pe stiva a unor valori pe avansulîn recursivitate

I Utilizarea acestora pentru calculul propriu-zis,pe revenirea din recursivitate

I Spat,iul ocupat pe stiva: Θ(n)

I Numarul de operat,ii: Θ(n)

I Informat,ie “ascunsa”, implicita, despre stare

65 / 423

Page 213: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia factorialIterare clasica

1: procedure FACTORIAL(n)2: product ← 13: i ← 14: while i ≤ n do5: product ← product · i6: i ← i + 17: end while8: return product9: end procedure

I Starea programului: variabilele i s, i product

I Spat,iu constant pe stiva!

I Cum putem exploata aceasta idee?

66 / 423

Page 214: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia factorialIterare clasica

1: procedure FACTORIAL(n)2: product ← 13: i ← 14: while i ≤ n do5: product ← product · i6: i ← i + 17: end while8: return product9: end procedure

I Starea programului: variabilele i s, i product

I Spat,iu constant pe stiva!

I Cum putem exploata aceasta idee?

66 / 423

Page 215: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia factorialIterare clasica

1: procedure FACTORIAL(n)2: product ← 13: i ← 14: while i ≤ n do5: product ← product · i6: i ← i + 17: end while8: return product9: end procedure

I Starea programului: variabilele i s, i product

I Spat,iu constant pe stiva!

I Cum putem exploata aceasta idee?

66 / 423

Page 216: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia factorialIterare clasica

1: procedure FACTORIAL(n)2: product ← 13: i ← 14: while i ≤ n do5: product ← product · i6: i ← i + 17: end while8: return product9: end procedure

I Starea programului: variabilele i s, i product

I Spat,iu constant pe stiva!

I Cum putem exploata aceasta idee?

66 / 423

Page 217: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia factorialRecursivitate pe coada

18 (define (fact-tail n)

19 (fact-tail-helper 1 1 n))

20

21 (define (fact-tail-helper product i n)

22 (if (> i n)

23 product

24 (fact-tail-helper (* product i)

25 (+ i 1)

26 n)))

1 (fact-tail-helper 1 1 3)

2 → (fact-tail-helper 1 2 3)

3 → (fact-tail-helper 2 3 3)

4 → (fact-tail-helper 6 4 3)

5 → 61, 1, 3

Stiva aparenta

1, 2, 3

2, 3, 3

6, 4, 3

67 / 423

Page 218: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia factorialRecursivitate pe coada

18 (define (fact-tail n)

19 (fact-tail-helper 1 1 n))

20

21 (define (fact-tail-helper product i n)

22 (if (> i n)

23 product

24 (fact-tail-helper (* product i)

25 (+ i 1)

26 n)))

1 (fact-tail-helper 1 1 3)

2 → (fact-tail-helper 1 2 3)

3 → (fact-tail-helper 2 3 3)

4 → (fact-tail-helper 6 4 3)

5 → 6

1, 1, 3

Stiva aparenta

1, 2, 3

2, 3, 3

6, 4, 3

67 / 423

Page 219: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia factorialRecursivitate pe coada

18 (define (fact-tail n)

19 (fact-tail-helper 1 1 n))

20

21 (define (fact-tail-helper product i n)

22 (if (> i n)

23 product

24 (fact-tail-helper (* product i)

25 (+ i 1)

26 n)))

1 (fact-tail-helper 1 1 3)

2 → (fact-tail-helper 1 2 3)

3 → (fact-tail-helper 2 3 3)

4 → (fact-tail-helper 6 4 3)

5 → 6

1, 1, 3

Stiva aparenta

1, 2, 3

2, 3, 3

6, 4, 3

67 / 423

Page 220: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia factorialRecursivitate pe coada

18 (define (fact-tail n)

19 (fact-tail-helper 1 1 n))

20

21 (define (fact-tail-helper product i n)

22 (if (> i n)

23 product

24 (fact-tail-helper (* product i)

25 (+ i 1)

26 n)))

1 (fact-tail-helper 1 1 3)

2 → (fact-tail-helper 1 2 3)

3 → (fact-tail-helper 2 3 3)

4 → (fact-tail-helper 6 4 3)

5 → 6

1, 1, 3

Stiva aparenta

1, 2, 3

2, 3, 3

6, 4, 3

67 / 423

Page 221: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia factorialRecursivitate pe coada

18 (define (fact-tail n)

19 (fact-tail-helper 1 1 n))

20

21 (define (fact-tail-helper product i n)

22 (if (> i n)

23 product

24 (fact-tail-helper (* product i)

25 (+ i 1)

26 n)))

1 (fact-tail-helper 1 1 3)

2 → (fact-tail-helper 1 2 3)

3 → (fact-tail-helper 2 3 3)

4 → (fact-tail-helper 6 4 3)

5 → 6

1, 1, 3

Stiva aparenta

1, 2, 3

2, 3, 3

6, 4, 3

67 / 423

Page 222: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia factorialRecursivitate pe coada

18 (define (fact-tail n)

19 (fact-tail-helper 1 1 n))

20

21 (define (fact-tail-helper product i n)

22 (if (> i n)

23 product

24 (fact-tail-helper (* product i)

25 (+ i 1)

26 n)))

1 (fact-tail-helper 1 1 3)

2 → (fact-tail-helper 1 2 3)

3 → (fact-tail-helper 2 3 3)

4 → (fact-tail-helper 6 4 3)

5 → 6

1, 1, 3

Stiva aparenta

1, 2, 3

2, 3, 3

6, 4, 3

67 / 423

Page 223: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia factorialRecursivitate pe coada

18 (define (fact-tail n)

19 (fact-tail-helper 1 1 n))

20

21 (define (fact-tail-helper product i n)

22 (if (> i n)

23 product

24 (fact-tail-helper (* product i)

25 (+ i 1)

26 n)))

1 (fact-tail-helper 1 1 3)

2 → (fact-tail-helper 1 2 3)

3 → (fact-tail-helper 2 3 3)

4 → (fact-tail-helper 6 4 3)

5 → 6

1, 1, 3

Stiva aparenta

1, 2, 3

2, 3, 3

6, 4, 3

67 / 423

Page 224: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia factorialRecursivitate pe coada

18 (define (fact-tail n)

19 (fact-tail-helper 1 1 n))

20

21 (define (fact-tail-helper product i n)

22 (if (> i n)

23 product

24 (fact-tail-helper (* product i)

25 (+ i 1)

26 n)))

1 (fact-tail-helper 1 1 3)

2 → (fact-tail-helper 1 2 3)

3 → (fact-tail-helper 2 3 3)

4 → (fact-tail-helper 6 4 3)

5 → 6

1, 1, 3

Stiva aparenta

1, 2, 3

2, 3, 3

6, 4, 3

67 / 423

Page 225: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia factorialRecursivitate pe coada

18 (define (fact-tail n)

19 (fact-tail-helper 1 1 n))

20

21 (define (fact-tail-helper product i n)

22 (if (> i n)

23 product

24 (fact-tail-helper (* product i)

25 (+ i 1)

26 n)))

1 (fact-tail-helper 1 1 3)

2 → (fact-tail-helper 1 2 3)

3 → (fact-tail-helper 2 3 3)

4 → (fact-tail-helper 6 4 3)

5 → 61, 1, 3

Stiva aparenta

1, 2, 3

2, 3, 3

6

67 / 423

Page 226: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia factorialRecursivitate pe coada

18 (define (fact-tail n)

19 (fact-tail-helper 1 1 n))

20

21 (define (fact-tail-helper product i n)

22 (if (> i n)

23 product

24 (fact-tail-helper (* product i)

25 (+ i 1)

26 n)))

1 (fact-tail-helper 1 1 3)

2 → (fact-tail-helper 1 2 3)

3 → (fact-tail-helper 2 3 3)

4 → (fact-tail-helper 6 4 3)

5 → 61, 1, 3

Stiva aparenta

1, 2, 3

6

6, 4, 3

67 / 423

Page 227: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia factorialRecursivitate pe coada

18 (define (fact-tail n)

19 (fact-tail-helper 1 1 n))

20

21 (define (fact-tail-helper product i n)

22 (if (> i n)

23 product

24 (fact-tail-helper (* product i)

25 (+ i 1)

26 n)))

1 (fact-tail-helper 1 1 3)

2 → (fact-tail-helper 1 2 3)

3 → (fact-tail-helper 2 3 3)

4 → (fact-tail-helper 6 4 3)

5 → 61, 1, 3

Stiva aparenta

6

2, 3, 3

6, 4, 3

67 / 423

Page 228: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia factorialRecursivitate pe coada

18 (define (fact-tail n)

19 (fact-tail-helper 1 1 n))

20

21 (define (fact-tail-helper product i n)

22 (if (> i n)

23 product

24 (fact-tail-helper (* product i)

25 (+ i 1)

26 n)))

1 (fact-tail-helper 1 1 3)

2 → (fact-tail-helper 1 2 3)

3 → (fact-tail-helper 2 3 3)

4 → (fact-tail-helper 6 4 3)

5 → 66

Stiva aparenta

1, 2, 3

2, 3, 3

6, 4, 3

67 / 423

Page 229: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe coadaI Calcul realizat pe avansul în recursivitate

I Aparent, transportarea neschimbata a valorii celeimai adânci aplicat,ii recursive, catre prima

I În realitate, tail call optimization: înlocuirea fiecaruiapel cu urmatorul

1 (fact-tail-helper 1 1 3)

2 → (fact-tail-helper 1 2 3)

3 → (fact-tail-helper 2 3 3)

4 → (fact-tail-helper 6 4 3)

5 → 6

68 / 423

Page 230: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe coadaI Calcul realizat pe avansul în recursivitate

I Aparent, transportarea neschimbata a valorii celeimai adânci aplicat,ii recursive, catre prima

I În realitate, tail call optimization: înlocuirea fiecaruiapel cu urmatorul

1 (fact-tail-helper 1 1 3)

2 → (fact-tail-helper 1 2 3)

3 → (fact-tail-helper 2 3 3)

4 → (fact-tail-helper 6 4 3)

5 → 6

1, 1, 3

Stiva reala(tail call optimization)

68 / 423

Page 231: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe coadaI Calcul realizat pe avansul în recursivitate

I Aparent, transportarea neschimbata a valorii celeimai adânci aplicat,ii recursive, catre prima

I În realitate, tail call optimization: înlocuirea fiecaruiapel cu urmatorul

1 (fact-tail-helper 1 1 3)

2 → (fact-tail-helper 1 2 3)

3 → (fact-tail-helper 2 3 3)

4 → (fact-tail-helper 6 4 3)

5 → 6

1, 1, 3

Stiva reala(tail call optimization)

68 / 423

Page 232: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe coadaI Calcul realizat pe avansul în recursivitate

I Aparent, transportarea neschimbata a valorii celeimai adânci aplicat,ii recursive, catre prima

I În realitate, tail call optimization: înlocuirea fiecaruiapel cu urmatorul

1 (fact-tail-helper 1 1 3)

2 → (fact-tail-helper 1 2 3)

3 → (fact-tail-helper 2 3 3)

4 → (fact-tail-helper 6 4 3)

5 → 6

1, 2, 3

Stiva reala(tail call optimization)

68 / 423

Page 233: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe coadaI Calcul realizat pe avansul în recursivitate

I Aparent, transportarea neschimbata a valorii celeimai adânci aplicat,ii recursive, catre prima

I În realitate, tail call optimization: înlocuirea fiecaruiapel cu urmatorul

1 (fact-tail-helper 1 1 3)

2 → (fact-tail-helper 1 2 3)

3 → (fact-tail-helper 2 3 3)

4 → (fact-tail-helper 6 4 3)

5 → 6

1, 2, 3

Stiva reala(tail call optimization)

68 / 423

Page 234: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe coadaI Calcul realizat pe avansul în recursivitate

I Aparent, transportarea neschimbata a valorii celeimai adânci aplicat,ii recursive, catre prima

I În realitate, tail call optimization: înlocuirea fiecaruiapel cu urmatorul

1 (fact-tail-helper 1 1 3)

2 → (fact-tail-helper 1 2 3)

3 → (fact-tail-helper 2 3 3)

4 → (fact-tail-helper 6 4 3)

5 → 6

2, 3, 3

Stiva reala(tail call optimization)

68 / 423

Page 235: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe coadaI Calcul realizat pe avansul în recursivitate

I Aparent, transportarea neschimbata a valorii celeimai adânci aplicat,ii recursive, catre prima

I În realitate, tail call optimization: înlocuirea fiecaruiapel cu urmatorul

1 (fact-tail-helper 1 1 3)

2 → (fact-tail-helper 1 2 3)

3 → (fact-tail-helper 2 3 3)

4 → (fact-tail-helper 6 4 3)

5 → 6

2, 3, 3

Stiva reala(tail call optimization)

68 / 423

Page 236: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe coada

I Calcul realizat pe avansul în recursivitate

I Aparent, transportarea neschimbata a valorii celeimai adânci aplicat,ii recursive, catre prima

I În realitate, tail call optimization: înlocuirea fiecaruiapel cu urmatorul

1 (fact-tail-helper 1 1 3)

2 → (fact-tail-helper 1 2 3)

3 → (fact-tail-helper 2 3 3)

4 → (fact-tail-helper 6 4 3)

5 → 6

6, 4, 3

Stiva reala(tail call optimization)

68 / 423

Page 237: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe coada

I Calcul realizat pe avansul în recursivitate

I Aparent, transportarea neschimbata a valorii celeimai adânci aplicat,ii recursive, catre prima

I În realitate, tail call optimization: înlocuirea fiecaruiapel cu urmatorul

1 (fact-tail-helper 1 1 3)

2 → (fact-tail-helper 1 2 3)

3 → (fact-tail-helper 2 3 3)

4 → (fact-tail-helper 6 4 3)

5 → 6

6

Stiva reala(tail call optimization)

68 / 423

Page 238: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe coada (cont.)

I Numarul de operat,ii: Θ(n)

I Spat,iul ocupat pe stiva: Θ(1)

I În afara de economisirea spat,iului, economisireatimpului necesar redimensionarii stivei!

I Diferent,a fat,a de iterarea clasica: transmitereaexplicita a starii ca parametru

69 / 423

Page 239: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe coada (cont.)

I Numarul de operat,ii: Θ(n)

I Spat,iul ocupat pe stiva: Θ(1)

I În afara de economisirea spat,iului, economisireatimpului necesar redimensionarii stivei!

I Diferent,a fat,a de iterarea clasica: transmitereaexplicita a starii ca parametru

69 / 423

Page 240: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe coada (cont.)

I Numarul de operat,ii: Θ(n)

I Spat,iul ocupat pe stiva: Θ(1)

I În afara de economisirea spat,iului, economisireatimpului necesar redimensionarii stivei!

I Diferent,a fat,a de iterarea clasica: transmitereaexplicita a starii ca parametru

69 / 423

Page 241: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe coada (cont.)

I Numarul de operat,ii: Θ(n)

I Spat,iul ocupat pe stiva: Θ(1)

I În afara de economisirea spat,iului, economisireatimpului necesar redimensionarii stivei!

I Diferent,a fat,a de iterarea clasica: transmitereaexplicita a starii ca parametru

69 / 423

Page 242: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ii s, i procese

I Funct,ie: descriere statica a unor modalitat,ide transformare

I Proces: Funct,ie în execut,ie, aspectul ei dinamic

I Posibilitatea unei funct,ii textual recursive(e.g., pe coada) de a genera un proces iterativ!

70 / 423

Page 243: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ii s, i procese

I Funct,ie: descriere statica a unor modalitat,ide transformare

I Proces: Funct,ie în execut,ie, aspectul ei dinamic

I Posibilitatea unei funct,ii textual recursive(e.g., pe coada) de a genera un proces iterativ!

70 / 423

Page 244: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ii s, i procese

I Funct,ie: descriere statica a unor modalitat,ide transformare

I Proces: Funct,ie în execut,ie, aspectul ei dinamic

I Posibilitatea unei funct,ii textual recursive(e.g., pe coada) de a genera un proces iterativ!

70 / 423

Page 245: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia FibonacciRecursivitate pe stiva, arborescenta

36 (define (fib-stack n)

37 (cond [(= n 0) 0]

38 [(= n 1) 1]

39 [else (+ (fib-stack (- n 1))

40 (fib-stack (- n 2)))]))

71 / 423

Page 246: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

(fib 5)

72 / 423

Page 247: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

(fib 5)

72 / 423

Page 248: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

(fib 5)

(fib 4)

72 / 423

Page 249: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

(fib 5)

(fib 4)

(fib 3)

72 / 423

Page 250: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

(fib 5)

(fib 4)

(fib 3)

(fib 2)

72 / 423

Page 251: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

(fib 5)

(fib 4)

(fib 3)

(fib 2)

(fib 1)

72 / 423

Page 252: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

(fib 5)

(fib 4)

(fib 3)

(fib 2)

1

72 / 423

Page 253: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

(fib 5)

(fib 4)

(fib 3)

(fib 2)

(fib 0)1

72 / 423

Page 254: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

(fib 5)

(fib 4)

(fib 3)

(fib 2)

01

72 / 423

Page 255: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

(fib 5)

(fib 4)

(fib 3)

(fib 2)

01

72 / 423

Page 256: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

(fib 5)

(fib 4)

(fib 3)

1

01

72 / 423

Page 257: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

(fib 5)

(fib 4)

(fib 3)

(fib 1)1

01

72 / 423

Page 258: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

(fib 5)

(fib 4)

(fib 3)

11

01

72 / 423

Page 259: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

(fib 5)

(fib 4)

(fib 3)

11

01

72 / 423

Page 260: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

(fib 5)

(fib 4)

2

11

01

72 / 423

Page 261: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

(fib 5)

(fib 4)

(fib 2)2

11

01

72 / 423

Page 262: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

(fib 5)

(fib 4)

(fib 2)

(fib 1)

2

11

01

72 / 423

Page 263: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

(fib 5)

(fib 4)

(fib 2)

1

2

11

01

72 / 423

Page 264: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

(fib 5)

(fib 4)

(fib 2)

(fib 0)1

2

11

01

72 / 423

Page 265: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

(fib 5)

(fib 4)

(fib 2)

01

2

11

01

72 / 423

Page 266: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

(fib 5)

(fib 4)

(fib 2)

01

2

11

01

72 / 423

Page 267: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

(fib 5)

(fib 4)

1

01

2

11

01

72 / 423

Page 268: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

(fib 5)

(fib 4)

1

01

2

11

01

72 / 423

Page 269: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

(fib 5)

3

1

01

2

11

01

72 / 423

Page 270: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

(fib 5)

(fib 3)

(fib 1)(fib 2)

(fib 0)(fib 1)

3

1

01

2

11

01

72 / 423

Page 271: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

(fib 5)

2

11

01

3

1

01

2

11

01

72 / 423

Page 272: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

(fib 5)

2

11

01

3

1

01

2

11

01

72 / 423

Page 273: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

5

2

11

01

3

1

01

2

11

01

72 / 423

Page 274: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia Fibonacci (cont.)Recursivitate pe stiva, arborescenta

5

2

11

01

3

1

01

2

11

01 duplicare

72 / 423

Page 275: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe stiva, arborescenta

I Spat,iul ocupat pe stiva: lungimea unei cai din arbore:Θ(n)

I În arborele cu radacina fib(n):

I numarul frunzelor: fib(n + 1)

I numarul nodurilor: 2fib(n + 1)−1

I Numarul de operat,ii: Θ(fib(n + 1)) = Θ(φn)

(φ — numarul de aur)

I Cres, tere exponent,iala a numarului de operat,ii!

73 / 423

Page 276: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe stiva, arborescenta

I Spat,iul ocupat pe stiva: lungimea unei cai din arbore:Θ(n)

I În arborele cu radacina fib(n):

I numarul frunzelor: fib(n + 1)

I numarul nodurilor: 2fib(n + 1)−1

I Numarul de operat,ii: Θ(fib(n + 1)) = Θ(φn)

(φ — numarul de aur)

I Cres, tere exponent,iala a numarului de operat,ii!

73 / 423

Page 277: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe stiva, arborescenta

I Spat,iul ocupat pe stiva: lungimea unei cai din arbore:Θ(n)

I În arborele cu radacina fib(n):I numarul frunzelor: fib(n + 1)

I numarul nodurilor: 2fib(n + 1)−1

I Numarul de operat,ii: Θ(fib(n + 1)) = Θ(φn)

(φ — numarul de aur)

I Cres, tere exponent,iala a numarului de operat,ii!

73 / 423

Page 278: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe stiva, arborescenta

I Spat,iul ocupat pe stiva: lungimea unei cai din arbore:Θ(n)

I În arborele cu radacina fib(n):I numarul frunzelor: fib(n + 1)

I numarul nodurilor: 2fib(n + 1)−1

I Numarul de operat,ii: Θ(fib(n + 1)) = Θ(φn)

(φ — numarul de aur)

I Cres, tere exponent,iala a numarului de operat,ii!

73 / 423

Page 279: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe stiva, arborescenta

I Spat,iul ocupat pe stiva: lungimea unei cai din arbore:Θ(n)

I În arborele cu radacina fib(n):I numarul frunzelor: fib(n + 1)

I numarul nodurilor: 2fib(n + 1)−1

I Numarul de operat,ii: Θ(fib(n + 1)) = Θ(φn)

(φ — numarul de aur)

I Cres, tere exponent,iala a numarului de operat,ii!

73 / 423

Page 280: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe stiva, arborescenta

I Spat,iul ocupat pe stiva: lungimea unei cai din arbore:Θ(n)

I În arborele cu radacina fib(n):I numarul frunzelor: fib(n + 1)

I numarul nodurilor: 2fib(n + 1)−1

I Numarul de operat,ii: Θ(fib(n + 1)) = Θ(φn)

(φ — numarul de aur)

I Cres, tere exponent,iala a numarului de operat,ii!

73 / 423

Page 281: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ia FibonacciRecursivitate pe coada

50 (define (fib-tail n)

51 (fib-tail-helper 1 0 n))

52

53 (define (fib-tail-helper a b count)

54 (if (= count 0)

55 b

56 (fib-tail-helper (+ a b) a (- count 1))))

74 / 423

Page 282: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe coada

I Numarul de operat,ii: Θ(n)

I Spat,iul ocupat pe stiva: Θ(1)

I Diminuarea numarului de operat,ii de la exponent,ialla liniar!

75 / 423

Page 283: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe coada

I Numarul de operat,ii: Θ(n)

I Spat,iul ocupat pe stiva: Θ(1)

I Diminuarea numarului de operat,ii de la exponent,ialla liniar!

75 / 423

Page 284: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe coada

I Numarul de operat,ii: Θ(n)

I Spat,iul ocupat pe stiva: Θ(1)

I Diminuarea numarului de operat,ii de la exponent,ialla liniar!

75 / 423

Page 285: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe stiva vs. pe coada

Pe stiva, lin./arb.

I Eleganta, adeseaapropiata de specificat,ie

I Ineficienta spat,ials, i/ sau temporal

Pe coadaI Obscura, necesitând

prelucrari specifice

I Eficienta, cel put,inspat,ial

Câteva cursuri mai târziu — o modalitate de exploatareeficienta a recursivitat,ii pe stiva

76 / 423

Page 286: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe stiva vs. pe coada

Pe stiva, lin./arb.

I Eleganta, adeseaapropiata de specificat,ie

I Ineficienta spat,ials, i/ sau temporal

Pe coadaI Obscura, necesitând

prelucrari specifice

I Eficienta, cel put,inspat,ial

Câteva cursuri mai târziu — o modalitate de exploatareeficienta a recursivitat,ii pe stiva

76 / 423

Page 287: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Recursivitate pe stiva vs. pe coada

Pe stiva, lin./arb.

I Eleganta, adeseaapropiata de specificat,ie

I Ineficienta spat,ials, i/ sau temporal

Pe coadaI Obscura, necesitând

prelucrari specifice

I Eficienta, cel put,inspat,ial

Câteva cursuri mai târziu — o modalitate de exploatareeficienta a recursivitat,ii pe stiva

76 / 423

Page 288: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Transformarea în recursivitate pe coada

I De obicei, posibila, prin introducerea unui acumulatorca parametru (v. exemplele anterioare)

I În anumite situat,ii, imposibila direct:

1 (define (f x)

2 (if (zero? x)

3 0

4 (g (f (- x 1)))))

5 ; comportamentul lui g depinde

6 ; de parametru

77 / 423

Page 289: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Transformarea în recursivitate pe coada

I De obicei, posibila, prin introducerea unui acumulatorca parametru (v. exemplele anterioare)

I În anumite situat,ii, imposibila direct:

1 (define (f x)

2 (if (zero? x)

3 0

4 (g (f (- x 1)))))

5 ; comportamentul lui g depinde

6 ; de parametru

77 / 423

Page 290: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Introducere

Tipuri de recursivitate

Specificul recursivitat,ii pe coada

78 / 423

Page 291: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construirea rezultatuluiRecursivitate pe stiva

1 ;; Inmulteste cu 10 toate elementele listei L

2 (define (mult-stack L)

3 (if (null? L)

4 L

5 (cons (* (car L) 10)

6 (mult-stack (cdr L)))))

1 (mult-stack ’(1 2))

2 → (cons 10 (mult-stack ’(2)) )

3 → (cons 10 (cons 20 (mult-stack ’())) )

4 → (cons 10 (cons 20 ’() ) )

5 → (cons 10 ’(20) ))

6 → ’(10 20) ; ordinea este corecta

79 / 423

Page 292: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construirea rezultatuluiRecursivitate pe stiva

1 ;; Inmulteste cu 10 toate elementele listei L

2 (define (mult-stack L)

3 (if (null? L)

4 L

5 (cons (* (car L) 10)

6 (mult-stack (cdr L)))))

1 (mult-stack ’(1 2))

2 → (cons 10 (mult-stack ’(2)) )

3 → (cons 10 (cons 20 (mult-stack ’())) )

4 → (cons 10 (cons 20 ’() ) )

5 → (cons 10 ’(20) ))

6 → ’(10 20) ; ordinea este corecta

79 / 423

Page 293: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construirea rezultatuluiRecursivitate pe stiva

1 ;; Inmulteste cu 10 toate elementele listei L

2 (define (mult-stack L)

3 (if (null? L)

4 L

5 (cons (* (car L) 10)

6 (mult-stack (cdr L)))))

1 (mult-stack ’(1 2))

2 → (cons 10 (mult-stack ’(2)) )

3 → (cons 10 (cons 20 (mult-stack ’())) )

4 → (cons 10 (cons 20 ’() ) )

5 → (cons 10 ’(20) ))

6 → ’(10 20) ; ordinea este corecta

79 / 423

Page 294: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construirea rezultatuluiRecursivitate pe stiva

1 ;; Inmulteste cu 10 toate elementele listei L

2 (define (mult-stack L)

3 (if (null? L)

4 L

5 (cons (* (car L) 10)

6 (mult-stack (cdr L)))))

1 (mult-stack ’(1 2))

2 → (cons 10 (mult-stack ’(2)) )

3 → (cons 10 (cons 20 (mult-stack ’())) )

4 → (cons 10 (cons 20 ’() ) )

5 → (cons 10 ’(20) ))

6 → ’(10 20) ; ordinea este corecta

79 / 423

Page 295: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construirea rezultatuluiRecursivitate pe stiva

1 ;; Inmulteste cu 10 toate elementele listei L

2 (define (mult-stack L)

3 (if (null? L)

4 L

5 (cons (* (car L) 10)

6 (mult-stack (cdr L)))))

1 (mult-stack ’(1 2))

2 → (cons 10 (mult-stack ’(2)) )

3 → (cons 10 (cons 20 (mult-stack ’())) )

4 → (cons 10 (cons 20 ’() ) )

5 → (cons 10 ’(20) ))

6 → ’(10 20) ; ordinea este corecta

79 / 423

Page 296: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construirea rezultatuluiRecursivitate pe stiva

1 ;; Inmulteste cu 10 toate elementele listei L

2 (define (mult-stack L)

3 (if (null? L)

4 L

5 (cons (* (car L) 10)

6 (mult-stack (cdr L)))))

1 (mult-stack ’(1 2))

2 → (cons 10 (mult-stack ’(2)) )

3 → (cons 10 (cons 20 (mult-stack ’())) )

4 → (cons 10 (cons 20 ’() ) )

5 → (cons 10 ’(20) ))

6 → ’(10 20) ; ordinea este corecta

79 / 423

Page 297: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construirea rezultatuluiRecursivitate pe stiva

1 ;; Inmulteste cu 10 toate elementele listei L

2 (define (mult-stack L)

3 (if (null? L)

4 L

5 (cons (* (car L) 10)

6 (mult-stack (cdr L)))))

1 (mult-stack ’(1 2))

2 → (cons 10 (mult-stack ’(2)) )

3 → (cons 10 (cons 20 (mult-stack ’())) )

4 → (cons 10 (cons 20 ’() ) )

5 → (cons 10 ’(20) ))

6 → ’(10 20) ; ordinea este corecta

79 / 423

Page 298: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construirea rezultatuluiRecursivitate pe stiva

1 ;; Inmulteste cu 10 toate elementele listei L

2 (define (mult-stack L)

3 (if (null? L)

4 L

5 (cons (* (car L) 10)

6 (mult-stack (cdr L)))))

1 (mult-stack ’(1 2))

2 → (cons 10 (mult-stack ’(2)) )

3 → (cons 10 (cons 20 (mult-stack ’())) )

4 → (cons 10 (cons 20 ’() ) )

5 → (cons 10 ’(20) ))

6 → ’(10 20) ; ordinea este corecta

79 / 423

Page 299: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construirea rezultatuluiRecursivitate pe stiva

1 ;; Inmulteste cu 10 toate elementele listei L

2 (define (mult-stack L)

3 (if (null? L)

4 L

5 (cons (* (car L) 10)

6 (mult-stack (cdr L)))))

1 (mult-stack ’(1 2))

2 → (cons 10 (mult-stack ’(2)) )

3 → (cons 10 (cons 20 (mult-stack ’())) )

4 → (cons 10 (cons 20 ’() ) )

5 → (cons 10 ’(20) ))

6 → ’(10 20) ; ordinea este corecta

79 / 423

Page 300: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construirea rezultatuluiRecursivitate pe stiva

1 ;; Inmulteste cu 10 toate elementele listei L

2 (define (mult-stack L)

3 (if (null? L)

4 L

5 (cons (* (car L) 10)

6 (mult-stack (cdr L)))))

1 (mult-stack ’(1 2))

2 → (cons 10 (mult-stack ’(2)) )

3 → (cons 10 (cons 20 (mult-stack ’())) )

4 → (cons 10 (cons 20 ’() ) )

5 → (cons 10 ’(20) ))

6 → ’(10 20) ; ordinea este corecta

79 / 423

Page 301: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construirea rezultatuluiRecursivitate pe stiva

1 ;; Inmulteste cu 10 toate elementele listei L

2 (define (mult-stack L)

3 (if (null? L)

4 L

5 (cons (* (car L) 10)

6 (mult-stack (cdr L)))))

1 (mult-stack ’(1 2))

2 → (cons 10 (mult-stack ’(2)) )

3 → (cons 10 (cons 20 (mult-stack ’())) )

4 → (cons 10 (cons 20 ’() ) )

5 → (cons 10 ’(20) ))

6 → ’(10 20)

; ordinea este corecta

79 / 423

Page 302: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construirea rezultatuluiRecursivitate pe stiva

1 ;; Inmulteste cu 10 toate elementele listei L

2 (define (mult-stack L)

3 (if (null? L)

4 L

5 (cons (* (car L) 10)

6 (mult-stack (cdr L)))))

1 (mult-stack ’(1 2))

2 → (cons 10 (mult-stack ’(2)) )

3 → (cons 10 (cons 20 (mult-stack ’())) )

4 → (cons 10 (cons 20 ’() ) )

5 → (cons 10 ’(20) ))

6 → ’(10 20) ; ordinea este corecta

79 / 423

Page 303: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construirea rezultatuluiRecursivitate pe coada

1 ;; Inmulteste cu 10 toate elementele listei L

2 (define (mult-tail-helper L Result)

3 (if (null? L)

4 Result

5 (mult-tail-helper (cdr L)

6 (cons (* (car L) 10)

7 Result))))

1 (mult-tail-helper ’(1 2) ’())

2 → (mult-tail-helper ’(2) ’(10))

3 → (mult-tail-helper ’() ’(20 10))

4 → ’(20 10) ; ordinea este inversata

80 / 423

Page 304: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construirea rezultatuluiRecursivitate pe coada

1 ;; Inmulteste cu 10 toate elementele listei L

2 (define (mult-tail-helper L Result)

3 (if (null? L)

4 Result

5 (mult-tail-helper (cdr L)

6 (cons (* (car L) 10)

7 Result))))

1 (mult-tail-helper ’(1 2) ’())

2 → (mult-tail-helper ’(2) ’(10))

3 → (mult-tail-helper ’() ’(20 10))

4 → ’(20 10) ; ordinea este inversata

80 / 423

Page 305: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construirea rezultatuluiRecursivitate pe coada

1 ;; Inmulteste cu 10 toate elementele listei L

2 (define (mult-tail-helper L Result)

3 (if (null? L)

4 Result

5 (mult-tail-helper (cdr L)

6 (cons (* (car L) 10)

7 Result))))

1 (mult-tail-helper ’(1 2) ’())

2 → (mult-tail-helper ’(2) ’(10))

3 → (mult-tail-helper ’() ’(20 10))

4 → ’(20 10) ; ordinea este inversata

80 / 423

Page 306: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construirea rezultatuluiRecursivitate pe coada

1 ;; Inmulteste cu 10 toate elementele listei L

2 (define (mult-tail-helper L Result)

3 (if (null? L)

4 Result

5 (mult-tail-helper (cdr L)

6 (cons (* (car L) 10)

7 Result))))

1 (mult-tail-helper ’(1 2) ’())

2 → (mult-tail-helper ’(2) ’(10))

3 → (mult-tail-helper ’() ’(20 10))

4 → ’(20 10) ; ordinea este inversata

80 / 423

Page 307: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construirea rezultatuluiRecursivitate pe coada

1 ;; Inmulteste cu 10 toate elementele listei L

2 (define (mult-tail-helper L Result)

3 (if (null? L)

4 Result

5 (mult-tail-helper (cdr L)

6 (cons (* (car L) 10)

7 Result))))

1 (mult-tail-helper ’(1 2) ’())

2 → (mult-tail-helper ’(2) ’(10))

3 → (mult-tail-helper ’() ’(20 10))

4 → ’(20 10) ; ordinea este inversata

80 / 423

Page 308: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construirea rezultatuluiRecursivitate pe coada

1 ;; Inmulteste cu 10 toate elementele listei L

2 (define (mult-tail-helper L Result)

3 (if (null? L)

4 Result

5 (mult-tail-helper (cdr L)

6 (cons (* (car L) 10)

7 Result))))

1 (mult-tail-helper ’(1 2) ’())

2 → (mult-tail-helper ’(2) ’(10))

3 → (mult-tail-helper ’() ’(20 10))

4 → ’(20 10) ; ordinea este inversata

80 / 423

Page 309: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construirea rezultatuluiRecursivitate pe coada

1 ;; Inmulteste cu 10 toate elementele listei L

2 (define (mult-tail-helper L Result)

3 (if (null? L)

4 Result

5 (mult-tail-helper (cdr L)

6 (cons (* (car L) 10)

7 Result))))

1 (mult-tail-helper ’(1 2) ’())

2 → (mult-tail-helper ’(2) ’(10))

3 → (mult-tail-helper ’() ’(20 10))

4 → ’(20 10)

; ordinea este inversata

80 / 423

Page 310: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construirea rezultatuluiRecursivitate pe coada

1 ;; Inmulteste cu 10 toate elementele listei L

2 (define (mult-tail-helper L Result)

3 (if (null? L)

4 Result

5 (mult-tail-helper (cdr L)

6 (cons (* (car L) 10)

7 Result))))

1 (mult-tail-helper ’(1 2) ’())

2 → (mult-tail-helper ’(2) ’(10))

3 → (mult-tail-helper ’() ’(20 10))

4 → ’(20 10) ; ordinea este inversata

80 / 423

Page 311: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construirea rezultatului (cont.)Recursivitate pe coada

Alternative pentru conservarea ordinii:

I Inversarea listei finale

1 (if (null? L)

2 (reverse Result)

3 ...)

I Adaugarea elementrului curent la sfârs, itul acumul.

1 (if (null? L)

2 ...

3 (mult-all-iter

4 (cdr L)

5 (append Result

6 (list (* (car L) 10)))))

81 / 423

Page 312: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construirea rezultatului (cont.)Recursivitate pe coada

Alternative pentru conservarea ordinii:

I Inversarea listei finale

1 (if (null? L)

2 (reverse Result)

3 ...)

I Adaugarea elementrului curent la sfârs, itul acumul.

1 (if (null? L)

2 ...

3 (mult-all-iter

4 (cdr L)

5 (append Result

6 (list (* (car L) 10)))))

81 / 423

Page 313: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construirea rezultatului (cont.)Recursivitate pe coada

Alternative pentru conservarea ordinii:

I Inversarea listei finale

1 (if (null? L)

2 (reverse Result)

3 ...)

I Adaugarea elementrului curent la sfârs, itul acumul.

1 (if (null? L)

2 ...

3 (mult-all-iter

4 (cdr L)

5 (append Result

6 (list (* (car L) 10)))))

81 / 423

Page 314: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Costul unei concatenari

1 (define (app A B) ; recursiva pe stiva

2 (if (null? A)

3 B

4 (cons (car A) (app (cdr A) B))))

Numar de operat,ii proport,ional cu lungimea primei liste!

82 / 423

Page 315: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Costul unei concatenari

1 (define (app A B) ; recursiva pe stiva

2 (if (null? A)

3 B

4 (cons (car A) (app (cdr A) B))))

Numar de operat,ii proport,ional cu lungimea primei liste!

82 / 423

Page 316: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Costul concatenarilor repetate

I Asociere la dreapta:

A ++ (B ++ (C ++ ...)...)

Numar de operat,ii proport,ional cu lungimea listeicurente

I Asociere la stânga:

(...(... ++ A) ++ B) ++ C

Numar de operat,ii proport,ional cu lungimea tuturorlistelor concatenate anterior

83 / 423

Page 317: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Costul concatenarilor repetate

I Asociere la dreapta:

A ++ (B ++ (C ++ ...)...)

Numar de operat,ii proport,ional cu lungimea listeicurente

I Asociere la stânga:

(...(... ++ A) ++ B) ++ C

Numar de operat,ii proport,ional cu lungimea tuturorlistelor concatenate anterior

83 / 423

Page 318: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Costul concatenarilor repetate

I Asociere la dreapta:

A ++ (B ++ (C ++ ...)...)

Numar de operat,ii proport,ional cu lungimea listeicurente

I Asociere la stânga:

(...(... ++ A) ++ B) ++ C

Numar de operat,ii proport,ional cu lungimea tuturorlistelor concatenate anterior

83 / 423

Page 319: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Costul concatenarilor repetate

I Asociere la dreapta:

A ++ (B ++ (C ++ ...)...)

Numar de operat,ii proport,ional cu lungimea listeicurente

I Asociere la stânga:

(...(... ++ A) ++ B) ++ C

Numar de operat,ii proport,ional cu lungimea tuturorlistelor concatenate anterior

83 / 423

Page 320: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Consecint,e asupra recursivitat,ii pe coada1 (define (mult-tail-helper L Result)

2 (if (null? L)

3 Result

4 (mult-tail-helper

5 (cdr L)

6 (append Result

7 (list (* (car L) 10))))))

1 (mult-tail-helper '(1 2 3) '())

2 → (mult-tail-helper '(2 3) (append '() '(10)))

3 → (mult-tail-helper '(3) (append '(10) '(20)))

4 → (mult-tail-helper '() (append '(10 20)

5 '(30)))

6 → (mult-tail-helper '() '(10 20 30))

7 → ’(10 20 30)

84 / 423

Page 321: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Consecint,e asupra recursivitat,ii pe coada (cont.)

I Parcurgerea întregului acumulator anterior,pentru construirea celui nou!

I Numarul de elemente parcurse:

0 + 1 + . . .+ (n−1) = Θ(n2)!

I Astfel, preferabila varianta inversarii,s, i nu cea a adaugarii la sfârs, it

85 / 423

Page 322: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Consecint,e asupra recursivitat,ii pe coada (cont.)

I Parcurgerea întregului acumulator anterior,pentru construirea celui nou!

I Numarul de elemente parcurse:

0 + 1 + . . .+ (n−1) = Θ(n2)!

I Astfel, preferabila varianta inversarii,s, i nu cea a adaugarii la sfârs, it

85 / 423

Page 323: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Consecint,e asupra recursivitat,ii pe coada (cont.)

I Parcurgerea întregului acumulator anterior,pentru construirea celui nou!

I Numarul de elemente parcurse:

0 + 1 + . . .+ (n−1) = Θ(n2)!

I Astfel, preferabila varianta inversarii,s, i nu cea a adaugarii la sfârs, it

85 / 423

Page 324: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Rezumat

I Diverse tipuri de recursivitateI pe stiva (liniara/ arborescenta)I pe coada

I Recursivitate pe stiva: de obicei, . . .I ElegantaI Ineficienta spat,ial s, i/ sau temporal

I Recursivitate pe coada: de obicei, . . .I Mai put,in lizibila decât cea pe stivaI Necesita prelucrari suplimentare (e.g. inversare)I Eficienta spat,ial s, i/ sau temporal

86 / 423

Page 325: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Bibliografie

Abelson, H. and Sussman, G. J. (1996). Structure andInterpretation of Computer Programs. MIT Press,Cambridge, MA, USA, 2nd edition.

87 / 423

Page 326: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Partea IV

Funct,ii ca valori de prim rang.Funct,ionale

88 / 423

Page 327: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Motivat,ie

Funct,ii ca valori de prim rang

Funct,ionale

Calculul lambda

89 / 423

Page 328: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Motivat,ie

Funct,ii ca valori de prim rang

Funct,ionale

Calculul lambda

90 / 423

Page 329: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abstractizare funct,ionala

1 (define ( double n)

2 (* n 2))

1 (define ( double n)

2 (+ n n))

(* 5 2) (* 10 2)

I Generalizare, de la dublarea valorilor particulare,la însus, i conceptul de dublare

I Rezultat: funct,ia double, substituibila cu orice altafunct,ie cu acelas, i comportament

I Mai precis, double = abstractizare funct,ionala

91 / 423

Page 330: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abstractizare funct,ionala

1 (define ( double n)

2 (* n 2))

1 (define ( double n)

2 (+ n n))

(* 5 2) (* 10 2)

I Generalizare, de la dublarea valorilor particulare,la însus, i conceptul de dublare

I Rezultat: funct,ia double

, substituibila cu orice altafunct,ie cu acelas, i comportament

I Mai precis, double = abstractizare funct,ionala

91 / 423

Page 331: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abstractizare funct,ionala

1 (define ( double n)

2 (* n 2))

1 (define ( double n)

2 (+ n n))

(* 5 2) (* 10 2)

I Generalizare, de la dublarea valorilor particulare,la însus, i conceptul de dublare

I Rezultat: funct,ia double

, substituibila cu orice altafunct,ie cu acelas, i comportament

I Mai precis, double = abstractizare funct,ionala

91 / 423

Page 332: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abstractizare funct,ionala

1 (define ( double n)

2 (* n 2))

1 (define ( double n)

2 (+ n n))

(* 5 2) (* 10 2)

I Generalizare, de la dublarea valorilor particulare,la însus, i conceptul de dublare

I Rezultat: funct,ia double, substituibila cu orice altafunct,ie cu acelas, i comportament

I Mai precis, double = abstractizare funct,ionala

91 / 423

Page 333: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abstractizare funct,ionala

1 (define ( double n)

2 (* n 2))

1 (define ( double n)

2 (+ n n))

(* 5 2) (* 10 2)

I Generalizare, de la dublarea valorilor particulare,la însus, i conceptul de dublare

I Rezultat: funct,ia double, substituibila cu orice altafunct,ie cu acelas, i comportament

I Mai precis, double = abstractizare funct,ionala

double

91 / 423

Page 334: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Un nivel mai sus1 ;; Inmulteste cu 10 toate elementele listei L

2 ;; '(1 2 3) -> '(10 20 30)

3 (define (mult L)

4 (if (null? L)

5 L

6 (cons (* (car L) 10)

7 (mult (cdr L)))))

8

9 ;; Obtine paritatea fiecarui numar (true = par)

10 ;; '(1 2 3) -> '(false true false)

11 (define (parities L)

12 (if (null? L)

13 L

14 (cons (even? (car L))

15 (parities (cdr L)))))

92 / 423

Page 335: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Un nivel mai sus1 ;; Inmulteste cu 10 toate elementele listei L

2 ;; '(1 2 3) -> '(10 20 30)

3 (define (mult L)

4 (if (null? L)

5 L

6 (cons (* (car L) 10)

7 (mult (cdr L)))))

8

9 ;; Obtine paritatea fiecarui numar (true = par)

10 ;; '(1 2 3) -> '(false true false)

11 (define (parities L)

12 (if (null? L)

13 L

14 (cons (even? (car L))

15 (parities (cdr L)))))

92 / 423

Page 336: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Un nivel mai sus1 ;; Inmulteste cu 10 toate elementele listei L

2 ;; '(1 2 3) -> '(10 20 30)

3 (define (mult L)

4 (if (null? L)

5 L

6 (cons (* (car L) 10)

7 (mult (cdr L)))))

8

9 ;; Obtine paritatea fiecarui numar (true = par)

10 ;; '(1 2 3) -> '(false true false)

11 (define (parities L)

12 (if (null? L)

13 L

14 (cons (even? (car L))

15 (parities (cdr L)))))

singura partevariabila,

dependentade (car L)

92 / 423

Page 337: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Un nivel mai sus (cont.)

Cum putem izola transformarea lui (car L)?

Prin funct,ii!

1 ;; map = asociere

2

3 (define (mult-map x )

4 (* x 10))

5

6 (define (parities-map x )

7 (even? x))

93 / 423

Page 338: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Un nivel mai sus (cont.)

Cum putem izola transformarea lui (car L)?Prin funct,ii!

1 ;; map = asociere

2

3 (define (mult-map x )

4 (* x 10))

5

6 (define (parities-map x )

7 (even? x))

93 / 423

Page 339: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Un nivel mai sus (cont.)

Cum putem izola transformarea lui (car L)?Prin funct,ii!

1 ;; map = asociere

2

3 (define (mult-map x )

4 (* x 10))

5

6 (define (parities-map x )

7 (even? x))

rolul lui(car L)

93 / 423

Page 340: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Un nivel mai sus (cont.)1 (define (map f L)

2 (if (null? L)

3 L

4 (cons (f (car L))

5 (map f (cdr L)))))

6

7 (define (mult L)

8 (map mult-map L))

9

10 (define (parities L)

11 (map parities-map L))

Generalizare, de la diversele transformari ale listelor,la conceptul de transformare element cu element,independent de natura acesteia — asociere (mapping)

94 / 423

Page 341: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Un nivel mai sus (cont.)1 (define (map f L)

2 (if (null? L)

3 L

4 (cons (f (car L))

5 (map f (cdr L)))))

6

7 (define (mult L)

8 (map mult-map L))

9

10 (define (parities L)

11 (map parities-map L))

Generalizare, de la diversele transformari ale listelor,la conceptul de transformare element cu element,independent de natura acesteia — asociere (mapping)

transformarealui (car L):parametru

94 / 423

Page 342: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Un nivel mai sus (cont.)1 (define (map f L)

2 (if (null? L)

3 L

4 (cons (f (car L))

5 (map f (cdr L)))))

6

7 (define (mult L)

8 (map mult-map L))

9

10 (define (parities L)

11 (map parities-map L))

Generalizare, de la diversele transformari ale listelor,la conceptul de transformare element cu element,independent de natura acesteia — asociere (mapping)

transformarealui (car L):parametru

94 / 423

Page 343: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Un nivel mai sus (cont.)1 (define (map f L)

2 (if (null? L)

3 L

4 (cons (f (car L))

5 (map f (cdr L)))))

6

7 (define (mult L)

8 (map mult-map L))

9

10 (define (parities L)

11 (map parities-map L))

Generalizare, de la diversele transformari ale listelor,la conceptul de transformare element cu element,independent de natura acesteia — asociere (mapping)

transformarealui (car L):parametru

94 / 423

Page 344: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Motivat,ie

Funct,ii ca valori de prim rang

Funct,ionale

Calculul lambda

95 / 423

Page 345: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ii ca valori de prim rang

I În exemplele anterioare: funct,ii vazute ca date!

I Avantaj: sporire considerabila a expresivitat,iilimbajului

I Statutul de valori de prim rang al funct,iilor,acestea putând fi:

I create dinamic (la execut,ie)I numiteI trimise ca parametri unei funct,iiI întoarse dintr-o funct,ie

96 / 423

Page 346: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ii ca valori de prim rang

I În exemplele anterioare: funct,ii vazute ca date!

I Avantaj: sporire considerabila a expresivitat,iilimbajului

I Statutul de valori de prim rang al funct,iilor,acestea putând fi:

I create dinamic (la execut,ie)I numiteI trimise ca parametri unei funct,iiI întoarse dintr-o funct,ie

96 / 423

Page 347: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ii ca valori de prim rang

I În exemplele anterioare: funct,ii vazute ca date!

I Avantaj: sporire considerabila a expresivitat,iilimbajului

I Statutul de valori de prim rang al funct,iilor,acestea putând fi:

I create dinamic (la execut,ie)I numiteI trimise ca parametri unei funct,iiI întoarse dintr-o funct,ie

96 / 423

Page 348: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluarea funct,iilor

Ca valori, evaluate la ele însele!

1 > +

2 #<procedure:+>

3

4 > (cons + '(1 2))

5 (#<procedure:+> 1 2)

6

7 > (list + - *)

8 (#<procedure:+> #<procedure:-> #<procedure:*>)

97 / 423

Page 349: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluarea funct,iilor

Ca valori, evaluate la ele însele!

1 > +

2 #<procedure:+>

3

4 > (cons + '(1 2))

5 (#<procedure:+> 1 2)

6

7 > (list + - *)

8 (#<procedure:+> #<procedure:-> #<procedure:*>)

97 / 423

Page 350: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluarea funct,iilor

Ca valori, evaluate la ele însele!

1 > +

2 #<procedure:+>

3

4 > (cons + '(1 2))

5 (#<procedure:+> 1 2)

6

7 > (list + - *)

8 (#<procedure:+> #<procedure:-> #<procedure:*>)

97 / 423

Page 351: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluarea funct,iilor

Ca valori, evaluate la ele însele!

1 > +

2 #<procedure:+>

3

4 > (cons + '(1 2))

5 (#<procedure:+> 1 2)

6

7 > (list + - *)

8 (#<procedure:+> #<procedure:-> #<procedure:*>)

97 / 423

Page 352: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluarea funct,iilor

Ca valori, evaluate la ele însele!

1 > +

2 #<procedure:+>

3

4 > (cons + '(1 2))

5 (#<procedure:+> 1 2)

6

7 > (list + - *)

8 (#<procedure:+> #<procedure:-> #<procedure:*>)

97 / 423

Page 353: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluarea funct,iilor

Ca valori, evaluate la ele însele!

1 > +

2 #<procedure:+>

3

4 > (cons + '(1 2))

5 (#<procedure:+> 1 2)

6

7 > (list + - *)

8 (#<procedure:+> #<procedure:-> #<procedure:*>)

97 / 423

Page 354: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluarea funct,iilor

Ca valori, evaluate la ele însele!

1 > +

2 #<procedure:+>

3

4 > (cons + '(1 2))

5 (#<procedure:+> 1 2)

6

7 > (list + - *)

8 (#<procedure:+> #<procedure:-> #<procedure:*>)

97 / 423

Page 355: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ii ca parametru

I În exemplele anterioare, funct,ii definite separat,des, i folosite o singura data:

1 (define (mult L)

2 (map mult-map L))

3

4 (define (parities L)

5 (map parities-map L))

I Putem defini funct,iile local unei expresii?

98 / 423

Page 356: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ii ca parametru

I În exemplele anterioare, funct,ii definite separat,des, i folosite o singura data:

1 (define (mult L)

2 (map mult-map L))

3

4 (define (parities L)

5 (map parities-map L))

I Putem defini funct,iile local unei expresii?

98 / 423

Page 357: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ii anonime

1 (define (mult L)

2 (map ( lambda ( x ) (* x 10) ) L))

3

4 (define (parities L)

5 (map (lambda (x) (even? x)) L))

De fapt,

1 (define (mult-map x)

2 (* x 10))

3

≡1 (define mult-map

2 (lambda (x)

3 (* x 10)))

simpla legare a variabilei mult-map la o funct,ie anonima

99 / 423

Page 358: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ii anonime

1 (define (mult L)

2 (map ( lambda ( x ) (* x 10) ) L))

3

4 (define (parities L)

5 (map (lambda (x) (even? x)) L))

constructor

De fapt,

1 (define (mult-map x)

2 (* x 10))

3

≡1 (define mult-map

2 (lambda (x)

3 (* x 10)))

simpla legare a variabilei mult-map la o funct,ie anonima

99 / 423

Page 359: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ii anonime

1 (define (mult L)

2 (map ( lambda ( x ) (* x 10) ) L))

3

4 (define (parities L)

5 (map (lambda (x) (even? x)) L))

constructorparametru

De fapt,

1 (define (mult-map x)

2 (* x 10))

3

≡1 (define mult-map

2 (lambda (x)

3 (* x 10)))

simpla legare a variabilei mult-map la o funct,ie anonima

99 / 423

Page 360: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ii anonime

1 (define (mult L)

2 (map ( lambda ( x ) (* x 10) ) L))

3

4 (define (parities L)

5 (map (lambda (x) (even? x)) L))

constructorparametru

corp

De fapt,

1 (define (mult-map x)

2 (* x 10))

3

≡1 (define mult-map

2 (lambda (x)

3 (* x 10)))

simpla legare a variabilei mult-map la o funct,ie anonima

99 / 423

Page 361: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ii anonime

1 (define (mult L)

2 (map ( lambda ( x ) (* x 10) ) L))

3

4 (define (parities L)

5 (map (lambda (x) (even? x)) L))

constructorparametru

corp

De fapt,

1 (define (mult-map x)

2 (* x 10))

3

≡1 (define mult-map

2 (lambda (x)

3 (* x 10)))

simpla legare a variabilei mult-map la o funct,ie anonima

99 / 423

Page 362: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ii anonime

1 (define (mult L)

2 (map ( lambda ( x ) (* x 10) ) L))

3

4 (define (parities L)

5 (map (lambda (x) (even? x)) L))

constructorparametru

corp

De fapt,

1 (define (mult-map x)

2 (* x 10))

3

≡1 (define mult-map

2 (lambda (x)

3 (* x 10)))

simpla legare a variabilei mult-map la o funct,ie anonima

99 / 423

Page 363: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ii ca valori de retur

I În exemplul cu funct,ia mult, cum înmult,im toateelementele listei cu un numar oarecare, nu neaparatcu 10?

I Posibila utilizare, pentru înmult,irea cu 5:

1 (map

(

mult-map

-by 5)

'(1 2 3))

I Cum aplicam mult-map-by doar asupra primuluiparametru?

1 (define (mult-map-by q x )

2 (* x q))

3

1 (define (mult-map-by q )

2 (lambda ( x )

3 (* x q)))

100 / 423

Page 364: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ii ca valori de retur

I În exemplul cu funct,ia mult, cum înmult,im toateelementele listei cu un numar oarecare, nu neaparatcu 10?

I Posibila utilizare, pentru înmult,irea cu 5:

1 (map

(

mult-map

-by 5)

'(1 2 3))

I Cum aplicam mult-map-by doar asupra primuluiparametru?

1 (define (mult-map-by q x )

2 (* x q))

3

1 (define (mult-map-by q )

2 (lambda ( x )

3 (* x q)))

funct,ie

100 / 423

Page 365: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ii ca valori de retur

I În exemplul cu funct,ia mult, cum înmult,im toateelementele listei cu un numar oarecare, nu neaparatcu 10?

I Posibila utilizare, pentru înmult,irea cu 5:

1 (map (mult-map-by 5) '(1 2 3))

I Cum aplicam mult-map-by doar asupra primuluiparametru?

1 (define (mult-map-by q x )

2 (* x q))

3

1 (define (mult-map-by q )

2 (lambda ( x )

3 (* x q)))

funct,ie

100 / 423

Page 366: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ii ca valori de retur

I În exemplul cu funct,ia mult, cum înmult,im toateelementele listei cu un numar oarecare, nu neaparatcu 10?

I Posibila utilizare, pentru înmult,irea cu 5:

1 (map (mult-map-by 5) '(1 2 3))

I Cum aplicam mult-map-by doar asupra primuluiparametru?

1 (define (mult-map-by q x )

2 (* x q))

3

1 (define (mult-map-by q )

2 (lambda ( x )

3 (* x q)))

funct,ie

100 / 423

Page 367: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ii ca valori de retur

I În exemplul cu funct,ia mult, cum înmult,im toateelementele listei cu un numar oarecare, nu neaparatcu 10?

I Posibila utilizare, pentru înmult,irea cu 5:

1 (map (mult-map-by 5) '(1 2 3))

I Cum aplicam mult-map-by doar asupra primuluiparametru?

1 (define (mult-map-by q x )

2 (* x q))

3

1 (define (mult-map-by q )

2 (lambda ( x )

3 (* x q)))

funct,ie

100 / 423

Page 368: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ii ca valori de retur

I În exemplul cu funct,ia mult, cum înmult,im toateelementele listei cu un numar oarecare, nu neaparatcu 10?

I Posibila utilizare, pentru înmult,irea cu 5:

1 (map (mult-map-by 5) '(1 2 3))

I Cum aplicam mult-map-by doar asupra primuluiparametru?

1 (define (mult-map-by q x )

2 (* x q))

3

1 (define (mult-map-by q )

2 (lambda ( x )

3 (* x q)))

funct,ie

simultan(uncurried)

100 / 423

Page 369: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ii ca valori de retur

I În exemplul cu funct,ia mult, cum înmult,im toateelementele listei cu un numar oarecare, nu neaparatcu 10?

I Posibila utilizare, pentru înmult,irea cu 5:

1 (map (mult-map-by 5) '(1 2 3))

I Cum aplicam mult-map-by doar asupra primuluiparametru?

1 (define (mult-map-by q x )

2 (* x q))

3

1 (define (mult-map-by q )

2 (lambda ( x )

3 (* x q)))

funct,ie

simultan(uncurried)

pe rând(curried)

100 / 423

Page 370: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ii ca valori de retur

I În exemplul cu funct,ia mult, cum înmult,im toateelementele listei cu un numar oarecare, nu neaparatcu 10?

I Posibila utilizare, pentru înmult,irea cu 5:

1 (map (mult-map-by 5) '(1 2 3))

I Cum aplicam mult-map-by doar asupra primuluiparametru?

1 (define (mult-map-by q x )

2 (* x q))

3

1 (define (mult-map-by q )

2 (lambda ( x )

3 (* x q)))

funct,ie

simultan(uncurried)

pe rând(curried)

100 / 423

Page 371: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Secvent,ierea parametrilor

I În loc sa afirmam ca mult-map-by areun parametru s, i ca întoarce o funct,ie,ne “prefacem” ca primes, te doi parametri, pe rând

I Avantaj: reutilizare, prin aplicare part,iala!

I Funct,ie curried: preia parametrii pe rând (aparent)

I Funct,ie uncurried: preia parametrii simultan

101 / 423

Page 372: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Secvent,ierea parametrilor

I În loc sa afirmam ca mult-map-by areun parametru s, i ca întoarce o funct,ie,ne “prefacem” ca primes, te doi parametri, pe rând

I Avantaj: reutilizare, prin aplicare part,iala!

I Funct,ie curried: preia parametrii pe rând (aparent)

I Funct,ie uncurried: preia parametrii simultan

101 / 423

Page 373: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Secvent,ierea parametrilor

I În loc sa afirmam ca mult-map-by areun parametru s, i ca întoarce o funct,ie,ne “prefacem” ca primes, te doi parametri, pe rând

I Avantaj: reutilizare, prin aplicare part,iala!

I Funct,ie curried: preia parametrii pe rând (aparent)

I Funct,ie uncurried: preia parametrii simultan

101 / 423

Page 374: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Secvent,ierea parametrilor

I În loc sa afirmam ca mult-map-by areun parametru s, i ca întoarce o funct,ie,ne “prefacem” ca primes, te doi parametri, pe rând

I Avantaj: reutilizare, prin aplicare part,iala!

I Funct,ie curried: preia parametrii pe rând (aparent)

I Funct,ie uncurried: preia parametrii simultan

101 / 423

Page 375: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Extinderea regulilor de evaluare

I Din moment ce funct,iile sunt valori posibileale expresiilor, necesitatea evaluarii inclusiva operatorului unei aplicat,ii

I Mai departe, evaluarea variabilei + la valoarea ei— funct,ia de adunare!

1 ( (if true + -) (+ 1 2) 3)

2 → ( + (+ 1 2) 3)

3 → ( #<procedure:+> (+ 1 2) 3)

Nota: Pasul de evaluare 2–3 nu transpare la utilizarea stepper-ului din Racket,

dar este prezent pe slide pentru completitudine.

102 / 423

Page 376: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Extinderea regulilor de evaluare

I Din moment ce funct,iile sunt valori posibileale expresiilor, necesitatea evaluarii inclusiva operatorului unei aplicat,ii

I Mai departe, evaluarea variabilei + la valoarea ei— funct,ia de adunare!

1 ( (if true + -) (+ 1 2) 3)

2 → ( + (+ 1 2) 3)

3 → ( #<procedure:+> (+ 1 2) 3)

Nota: Pasul de evaluare 2–3 nu transpare la utilizarea stepper-ului din Racket,

dar este prezent pe slide pentru completitudine.

102 / 423

Page 377: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Extinderea regulilor de evaluare

I Din moment ce funct,iile sunt valori posibileale expresiilor, necesitatea evaluarii inclusiva operatorului unei aplicat,ii

I Mai departe, evaluarea variabilei + la valoarea ei— funct,ia de adunare!

1 ( (if true + -) (+ 1 2) 3)

2 → ( + (+ 1 2) 3)

3 → ( #<procedure:+> (+ 1 2) 3)

Nota: Pasul de evaluare 2–3 nu transpare la utilizarea stepper-ului din Racket,

dar este prezent pe slide pentru completitudine.

102 / 423

Page 378: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Extinderea regulilor de evaluare

I Din moment ce funct,iile sunt valori posibileale expresiilor, necesitatea evaluarii inclusiva operatorului unei aplicat,ii

I Mai departe, evaluarea variabilei + la valoarea ei— funct,ia de adunare!

1 ( (if true + -) (+ 1 2) 3)

2 → ( + (+ 1 2) 3)

3 → ( #<procedure:+> (+ 1 2) 3)

Nota: Pasul de evaluare 2–3 nu transpare la utilizarea stepper-ului din Racket,

dar este prezent pe slide pentru completitudine.

102 / 423

Page 379: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Extinderea regulilor de evaluare

I Din moment ce funct,iile sunt valori posibileale expresiilor, necesitatea evaluarii inclusiva operatorului unei aplicat,ii

I Mai departe, evaluarea variabilei + la valoarea ei— funct,ia de adunare!

1 ( (if true + -) (+ 1 2) 3)

2 → ( + (+ 1 2) 3)

3 → ( #<procedure:+> (+ 1 2) 3)

Nota: Pasul de evaluare 2–3 nu transpare la utilizarea stepper-ului din Racket,

dar este prezent pe slide pentru completitudine.

102 / 423

Page 380: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Extinderea regulilor de evaluare

I Din moment ce funct,iile sunt valori posibileale expresiilor, necesitatea evaluarii inclusiva operatorului unei aplicat,ii

I Mai departe, evaluarea variabilei + la valoarea ei— funct,ia de adunare!

1 ( (if true + -) (+ 1 2) 3)

2 → ( + (+ 1 2) 3)

3 → ( #<procedure:+> (+ 1 2) 3)

Nota: Pasul de evaluare 2–3 nu transpare la utilizarea stepper-ului din Racket,

dar este prezent pe slide pentru completitudine.

102 / 423

Page 381: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Aplicat,ie: compunerea a doua funct,ii

1 (define (comp f g)

2 (lambda (x)

3 (f (g x))))

4

5 ((comp car cdr) '(1 2 3)) → 2

103 / 423

Page 382: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Motivat,ie

Funct,ii ca valori de prim rang

Funct,ionale

Calculul lambda

104 / 423

Page 383: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ionale

I Funct,ionala = funct,ie care primes, te ca parametrus, i/ sau întoarce o funct,ie

I Surprind metode generale de prelucrare

I Funct,ionale standard în majoritatea limbajelorfunct,ionale (prezentate în continuare):

I map

I filter

I foldl (fold left)I foldr (fold right)

105 / 423

Page 384: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ionale

I Funct,ionala = funct,ie care primes, te ca parametrus, i/ sau întoarce o funct,ie

I Surprind metode generale de prelucrare

I Funct,ionale standard în majoritatea limbajelorfunct,ionale (prezentate în continuare):

I map

I filter

I foldl (fold left)I foldr (fold right)

105 / 423

Page 385: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ionale

I Funct,ionala = funct,ie care primes, te ca parametrus, i/ sau întoarce o funct,ie

I Surprind metode generale de prelucrare

I Funct,ionale standard în majoritatea limbajelorfunct,ionale (prezentate în continuare):

I map

I filter

I foldl (fold left)I foldr (fold right)

105 / 423

Page 386: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ionale

I Funct,ionala = funct,ie care primes, te ca parametrus, i/ sau întoarce o funct,ie

I Surprind metode generale de prelucrare

I Funct,ionale standard în majoritatea limbajelorfunct,ionale (prezentate în continuare):

I map

I filter

I foldl (fold left)I foldr (fold right)

105 / 423

Page 387: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ionale

I Funct,ionala = funct,ie care primes, te ca parametrus, i/ sau întoarce o funct,ie

I Surprind metode generale de prelucrare

I Funct,ionale standard în majoritatea limbajelorfunct,ionale (prezentate în continuare):

I map

I filter

I foldl (fold left)I foldr (fold right)

105 / 423

Page 388: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ionale

I Funct,ionala = funct,ie care primes, te ca parametrus, i/ sau întoarce o funct,ie

I Surprind metode generale de prelucrare

I Funct,ionale standard în majoritatea limbajelorfunct,ionale (prezentate în continuare):

I map

I filter

I foldl (fold left)

I foldr (fold right)

105 / 423

Page 389: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ionale

I Funct,ionala = funct,ie care primes, te ca parametrus, i/ sau întoarce o funct,ie

I Surprind metode generale de prelucrare

I Funct,ionale standard în majoritatea limbajelorfunct,ionale (prezentate în continuare):

I map

I filter

I foldl (fold left)I foldr (fold right)

105 / 423

Page 390: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ionala map

I Aplicarea unei transformari asupra tuturorelementelor unei liste

I Tratata anterior

1 (map (lambda (x) (* x 10)) '(1 2 3))

2 → '(10 20 30)

106 / 423

Page 391: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ionala filter

I Extragerea dintr-o lista a elementelor care satisfacun predicat logic

I Funct,ia primita ca parametru trebuie sa întoarcao valoare booleana

1 (filter even? '(1 2 3))

2 → '(2)

107 / 423

Page 392: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ionala foldl

I Acumularea tuturor elementelor unei liste sub formaunei singure valori (posibil tot lista, dar nu exclusiv)

I Pacurgere stânga → dreapta

I Utilizarea unei funct,ii binare element-acumulator

I Pornire cu un acumulator init,ial

I Natural recursiva pe . . .

1 (foldl + 0 '(1 2 3))

2 → 6

+

3+

2+

10

108 / 423

Page 393: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ionala foldl

I Acumularea tuturor elementelor unei liste sub formaunei singure valori (posibil tot lista, dar nu exclusiv)

I Pacurgere stânga → dreapta

I Utilizarea unei funct,ii binare element-acumulator

I Pornire cu un acumulator init,ial

I Natural recursiva pe coada

1 (foldl + 0 '(1 2 3))

2 → 6

+

3+

2+

10

108 / 423

Page 394: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ionala foldr

I Similar cu foldl

I Pacurgere dreapta → stânga

I Operare pe structura listei init,iale

I Natural recursiva pe . . .

1 (foldr + 0 '(1 2 3))

2 → 6

cons

cons

cons

’()3

2

1

+

+

+

03

2

1

109 / 423

Page 395: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ionala foldr

I Similar cu foldl

I Pacurgere dreapta → stânga

I Operare pe structura listei init,iale

I Natural recursiva pe stiva

1 (foldr + 0 '(1 2 3))

2 → 6

cons

cons

cons

’()3

2

1

+

+

+

03

2

1

109 / 423

Page 396: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Universalitatea funct,ionalelor fold*

I Orice funct,ie primitiv recursiva pe liste,implementabila în termenii funct,ionalelor fold*

I În particular, utilizabile pentru implementareafunct,ionalelor map s, i filter!

110 / 423

Page 397: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Universalitatea funct,ionalelor fold*

I Orice funct,ie primitiv recursiva pe liste,implementabila în termenii funct,ionalelor fold*

I În particular, utilizabile pentru implementareafunct,ionalelor map s, i filter!

110 / 423

Page 398: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Motivat,ie

Funct,ii ca valori de prim rang

Funct,ionale

Calculul lambda

111 / 423

Page 399: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Trasaturi

I Model de calculabilitate — Alonzo Church, 1932

I Centrat pe conceptul de funct,ie

I Calculul: evaluarea aplicat,iilor de funct,ii,prin substitut,ie textuala

112 / 423

Page 400: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluare

(λ x . x y )

→ y

“Pentru a aplica funct,ia λx .x

asupra parametrului actual,y , se indentifica parametrul formal, x , în corpul funct,iei, x ,

iar aparit,iile primului, x (singura), se substituiecu parametrul actual, obt,inându-se rezultatul

unui pas de evaluare.”

113 / 423

Page 401: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluare

(λ x . x y )

→ y

“Pentru a aplica funct,ia λx .x asupra parametrului actual,y ,

se indentifica parametrul formal, x , în corpul funct,iei, x ,iar aparit,iile primului, x (singura), se substituie

cu parametrul actual, obt,inându-se rezultatulunui pas de evaluare.”

113 / 423

Page 402: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluare

(λ x . x y )

→ y

“Pentru a aplica funct,ia λx .x asupra parametrului actual,y , se indentifica parametrul formal, x ,

în corpul funct,iei, x ,iar aparit,iile primului, x (singura), se substituie

cu parametrul actual, obt,inându-se rezultatulunui pas de evaluare.”

113 / 423

Page 403: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluare

(λ x . x y )

→ y

“Pentru a aplica funct,ia λx .x asupra parametrului actual,y , se indentifica parametrul formal, x , în corpul funct,iei, x ,

iar aparit,iile primului, x (singura), se substituiecu parametrul actual, obt,inându-se rezultatul

unui pas de evaluare.”

113 / 423

Page 404: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluare

(λ x . x y )

→ y

x

“Pentru a aplica funct,ia λx .x asupra parametrului actual,y , se indentifica parametrul formal, x , în corpul funct,iei, x ,

iar aparit,iile primului, x (singura),

se substituiecu parametrul actual, obt,inându-se rezultatul

unui pas de evaluare.”

113 / 423

Page 405: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluare

(λ x . x y )

→ y

x

“Pentru a aplica funct,ia λx .x asupra parametrului actual,y , se indentifica parametrul formal, x , în corpul funct,iei, x ,

iar aparit,iile primului, x (singura), se substituiecu parametrul actual,

obt,inându-se rezultatulunui pas de evaluare.”

113 / 423

Page 406: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluare

(λ x . x y )→ yx

“Pentru a aplica funct,ia λx .x asupra parametrului actual,y , se indentifica parametrul formal, x , în corpul funct,iei, x ,

iar aparit,iile primului, x (singura), se substituiecu parametrul actual, obt,inându-se rezultatul

unui pas de evaluare.”

113 / 423

Page 407: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Formalizarea substitut,iei

În expresia (λx .λ x .y y ):

I Aplicarea mecanica a principiul substitut,iei: λy .y

I Intuitiv: λx .y

I Rezultat eronat al abordarii mecanice!

I Ce ar trebui substituit de fapt?

114 / 423

Page 408: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Formalizarea substitut,iei

În expresia (λx .λ x .y y ):

I Aplicarea mecanica a principiul substitut,iei: λy .y

I Intuitiv: λx .y

I Rezultat eronat al abordarii mecanice!

I Ce ar trebui substituit de fapt?

114 / 423

Page 409: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Formalizarea substitut,iei

În expresia (λx .λ x .y y ):

I Aplicarea mecanica a principiul substitut,iei: λy .y

I Intuitiv: λx .y

I Rezultat eronat al abordarii mecanice!

I Ce ar trebui substituit de fapt?

114 / 423

Page 410: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Formalizarea substitut,iei

În expresia (λx .λ x .y y ):

I Aplicarea mecanica a principiul substitut,iei: λy .y

I Intuitiv: λx .y

I Rezultat eronat al abordarii mecanice!

I Ce ar trebui substituit de fapt?

114 / 423

Page 411: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Formalizarea substitut,iei

În expresia (λx .λ x .y y ):

I Aplicarea mecanica a principiul substitut,iei: λy .y

I Intuitiv: λx .y

I Rezultat eronat al abordarii mecanice!

I Ce ar trebui substituit de fapt?

114 / 423

Page 412: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Aparit,ii libere s, i legate ale variabilelor

(λ x .(

x

λ x . x ) x )

I Aparit,ie legata a lui x :

I Dupa λ

I În corpul unei funct,ii de parametru x

I Dependent,a statutului unei aparit,ii de expresia la carene raportam!

115 / 423

Page 413: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Aparit,ii libere s, i legate ale variabilelor

(λ x .(

x

λ x . x ) x )

I Aparit,ie legata a lui x :

I Dupa λ

I În corpul unei funct,ii de parametru x

I Dependent,a statutului unei aparit,ii de expresia la carene raportam!

libera

115 / 423

Page 414: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Aparit,ii libere s, i legate ale variabilelor

(λ x .

( x

λ x .

x )

x )

I Aparit,ie legata a lui x :

I Dupa λ

I În corpul unei funct,ii de parametru x

I Dependent,a statutului unei aparit,ii de expresia la carene raportam!

libera

115 / 423

Page 415: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Aparit,ii libere s, i legate ale variabilelor

(

λ x .( x

λ x .

x )

x )

I Aparit,ie legata a lui x :

I Dupa λ

I În corpul unei funct,ii de parametru x

I Dependent,a statutului unei aparit,ii de expresia la carene raportam!

legata

115 / 423

Page 416: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Aparit,ii libere s, i legate ale variabilelor

(

λ x .( x λ x . x )

x )

I Aparit,ie legata a lui x :

I Dupa λ

I În corpul unei funct,ii de parametru x

I Dependent,a statutului unei aparit,ii de expresia la carene raportam!

legata

115 / 423

Page 417: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Aparit,ii libere s, i legate ale variabilelor

(λ x .( x λ x . x ) x )

I Aparit,ie legata a lui x :

I Dupa λ

I În corpul unei funct,ii de parametru x

I Dependent,a statutului unei aparit,ii de expresia la carene raportam!

legata libera

115 / 423

Page 418: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Aparit,ii libere s, i legate ale variabilelor

(λ x .( x λ x . x ) x )

I Aparit,ie legata a lui x :

I Dupa λ

I În corpul unei funct,ii de parametru x

I Dependent,a statutului unei aparit,ii de expresia la carene raportam!

legata libera

115 / 423

Page 419: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Aparit,ii libere s, i legate ale variabilelor

(λ x .( x λ x . x ) x )

I Aparit,ie legata a lui x :I Dupa λ

I În corpul unei funct,ii de parametru x

I Dependent,a statutului unei aparit,ii de expresia la carene raportam!

legata libera

115 / 423

Page 420: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Aparit,ii libere s, i legate ale variabilelor

(λ x .( x λ x . x ) x )

I Aparit,ie legata a lui x :I Dupa λ

I În corpul unei funct,ii de parametru x

I Dependent,a statutului unei aparit,ii de expresia la carene raportam!

legata libera

115 / 423

Page 421: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Aparit,ii libere s, i legate ale variabilelor

(λ x .( x λ x . x ) x )

I Aparit,ie legata a lui x :I Dupa λ

I În corpul unei funct,ii de parametru x

I Dependent,a statutului unei aparit,ii de expresia la carene raportam!

legata libera

115 / 423

Page 422: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Formalizarea substitut,iei (cont.)

I Substituirea tuturor aparit,iilor parametrului formal,care sunt libere în raport cu corpul!

I În exemplul anterior, (λx .λx .y y):

I Absent,a aparit,iilor libere ale lui x în corpul λx .yI Producerea corecta a corpului nemodificat ca rezultat

I În expresia (λx .λcons.x cons):

I Aparit,ia din dreapta a lui cons este libera,cu semnificat,ia din Racket

I Aplicarea mecanica: λcons.consI Rezultat eronat, din cauza modificarii statutului,

din aparit,ie libera în legata

116 / 423

Page 423: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Formalizarea substitut,iei (cont.)

I Substituirea tuturor aparit,iilor parametrului formal,care sunt libere în raport cu corpul!

I În exemplul anterior, (λx .λx .y y):

I Absent,a aparit,iilor libere ale lui x în corpul λx .yI Producerea corecta a corpului nemodificat ca rezultat

I În expresia (λx .λcons.x cons):

I Aparit,ia din dreapta a lui cons este libera,cu semnificat,ia din Racket

I Aplicarea mecanica: λcons.consI Rezultat eronat, din cauza modificarii statutului,

din aparit,ie libera în legata

116 / 423

Page 424: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Formalizarea substitut,iei (cont.)

I Substituirea tuturor aparit,iilor parametrului formal,care sunt libere în raport cu corpul!

I În exemplul anterior, (λx .λx .y y):I Absent,a aparit,iilor libere ale lui x în corpul λx .y

I Producerea corecta a corpului nemodificat ca rezultat

I În expresia (λx .λcons.x cons):

I Aparit,ia din dreapta a lui cons este libera,cu semnificat,ia din Racket

I Aplicarea mecanica: λcons.consI Rezultat eronat, din cauza modificarii statutului,

din aparit,ie libera în legata

116 / 423

Page 425: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Formalizarea substitut,iei (cont.)

I Substituirea tuturor aparit,iilor parametrului formal,care sunt libere în raport cu corpul!

I În exemplul anterior, (λx .λx .y y):I Absent,a aparit,iilor libere ale lui x în corpul λx .yI Producerea corecta a corpului nemodificat ca rezultat

I În expresia (λx .λcons.x cons):

I Aparit,ia din dreapta a lui cons este libera,cu semnificat,ia din Racket

I Aplicarea mecanica: λcons.consI Rezultat eronat, din cauza modificarii statutului,

din aparit,ie libera în legata

116 / 423

Page 426: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Formalizarea substitut,iei (cont.)

I Substituirea tuturor aparit,iilor parametrului formal,care sunt libere în raport cu corpul!

I În exemplul anterior, (λx .λx .y y):I Absent,a aparit,iilor libere ale lui x în corpul λx .yI Producerea corecta a corpului nemodificat ca rezultat

I În expresia (λx .λcons.x cons):

I Aparit,ia din dreapta a lui cons este libera,cu semnificat,ia din Racket

I Aplicarea mecanica: λcons.consI Rezultat eronat, din cauza modificarii statutului,

din aparit,ie libera în legata

116 / 423

Page 427: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Formalizarea substitut,iei (cont.)

I Substituirea tuturor aparit,iilor parametrului formal,care sunt libere în raport cu corpul!

I În exemplul anterior, (λx .λx .y y):I Absent,a aparit,iilor libere ale lui x în corpul λx .yI Producerea corecta a corpului nemodificat ca rezultat

I În expresia (λx .λcons.x cons):I Aparit,ia din dreapta a lui cons este libera,

cu semnificat,ia din Racket

I Aplicarea mecanica: λcons.consI Rezultat eronat, din cauza modificarii statutului,

din aparit,ie libera în legata

116 / 423

Page 428: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Formalizarea substitut,iei (cont.)

I Substituirea tuturor aparit,iilor parametrului formal,care sunt libere în raport cu corpul!

I În exemplul anterior, (λx .λx .y y):I Absent,a aparit,iilor libere ale lui x în corpul λx .yI Producerea corecta a corpului nemodificat ca rezultat

I În expresia (λx .λcons.x cons):I Aparit,ia din dreapta a lui cons este libera,

cu semnificat,ia din RacketI Aplicarea mecanica: λcons.cons

I Rezultat eronat, din cauza modificarii statutului,din aparit,ie libera în legata

116 / 423

Page 429: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Formalizarea substitut,iei (cont.)

I Substituirea tuturor aparit,iilor parametrului formal,care sunt libere în raport cu corpul!

I În exemplul anterior, (λx .λx .y y):I Absent,a aparit,iilor libere ale lui x în corpul λx .yI Producerea corecta a corpului nemodificat ca rezultat

I În expresia (λx .λcons.x cons):I Aparit,ia din dreapta a lui cons este libera,

cu semnificat,ia din RacketI Aplicarea mecanica: λcons.consI Rezultat eronat, din cauza modificarii statutului,

din aparit,ie libera în legata

116 / 423

Page 430: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Redenumirea variabilelor legate

(λx .λcons.x cons)

Aparit,iile legate din corp,în conflict cu cele libere din parametrul actual,

redenumite!

117 / 423

Page 431: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Redenumirea variabilelor legate

(λx .λcons.x cons)

Aparit,iile legate din corp,

în conflict cu cele libere din parametrul actual,redenumite!

117 / 423

Page 432: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Redenumirea variabilelor legate

(λx .λcons.x cons)

Aparit,iile legate din corp,în conflict cu cele libere din parametrul actual,

redenumite!

117 / 423

Page 433: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Redenumirea variabilelor legate

(λx .λz

ons

.x cons)

Aparit,iile legate din corp,în conflict cu cele libere din parametrul actual,

redenumite!

117 / 423

Page 434: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Formalizarea substitut,iei — concluzie

I Substituirea tuturor aparit,iilor parametrului formal,care sunt libere în raport cu corpul, ulterioaraeventualelor redenumiri ale aparit,iilor legatedin corpul funct,iei, care coincid cu aparit,iile liberedin parametrul actual

I În exemplul anterior, (λx .λz.x cons)→ λz.cons

I Rezultat corect, cu pastrarea statutului de aparit,ielibera

118 / 423

Page 435: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Formalizarea substitut,iei — concluzie

I Substituirea tuturor aparit,iilor parametrului formal,care sunt libere în raport cu corpul, ulterioaraeventualelor redenumiri ale aparit,iilor legatedin corpul funct,iei, care coincid cu aparit,iile liberedin parametrul actual

I În exemplul anterior, (λx .λz.x cons)→ λz.cons

I Rezultat corect, cu pastrarea statutului de aparit,ielibera

118 / 423

Page 436: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Formalizarea substitut,iei — concluzie

I Substituirea tuturor aparit,iilor parametrului formal,care sunt libere în raport cu corpul, ulterioaraeventualelor redenumiri ale aparit,iilor legatedin corpul funct,iei, care coincid cu aparit,iile liberedin parametrul actual

I În exemplul anterior, (λx .λz.x cons)→ λz.cons

I Rezultat corect, cu pastrarea statutului de aparit,ielibera

118 / 423

Page 437: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Universalitatea funct,iilor

I Posibilitatea reprezentarii tuturor valorilor uzualeexclusiv prin funct,ii (v. slide-ul 50)

I Mai devreme, funct,ii ca date (parametri, valoride retur etc.)

I Acum, date ca funct,ii!!

I V. sursele atas, te slide-urilor

119 / 423

Page 438: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Rezumat

I Abstractizare funct,ionala

I Funct,ii ca valori — sporirea expresivitat,ii limbajului

I Funct,ionale — metode generale de prelucrare

I Calculul lambda s, i universalitatea funct,iilor

120 / 423

Page 439: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Partea V

Legarea variabilelor.Evaluare contextuala

121 / 423

Page 440: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Legarea variabilelor

Contexte, închideri, evaluare contextuala

122 / 423

Page 441: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Legarea variabilelor

Contexte, închideri, evaluare contextuala

123 / 423

Page 442: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

VariabileProprietat,i

I Tip: asociate valorilor, nu variabilelor

I Identificator

I Valoarea legata (la un anumit moment)

I Domeniul de vizibilitate

I Durata de viat,a

124 / 423

Page 443: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

VariabileProprietat,i

I Tip: asociate valorilor, nu variabilelor

I Identificator

I Valoarea legata (la un anumit moment)

I Domeniul de vizibilitate

I Durata de viat,a

124 / 423

Page 444: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

VariabileProprietat,i

I Tip: asociate valorilor, nu variabilelor

I Identificator

I Valoarea legata (la un anumit moment)

I Domeniul de vizibilitate

I Durata de viat,a

124 / 423

Page 445: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

VariabileProprietat,i

I Tip: asociate valorilor, nu variabilelor

I Identificator

I Valoarea legata (la un anumit moment)

I Domeniul de vizibilitate

I Durata de viat,a

124 / 423

Page 446: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

VariabileProprietat,i

I Tip: asociate valorilor, nu variabilelor

I Identificator

I Valoarea legata (la un anumit moment)

I Domeniul de vizibilitate

I Durata de viat,a

124 / 423

Page 447: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

VariabileStari

I Declarata: cunoas, tem identificatorul

I Definita: cunoas, tem s, i valoarea

125 / 423

Page 448: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

VariabileStari

I Declarata: cunoas, tem identificatorul

I Definita: cunoas, tem s, i valoarea

125 / 423

Page 449: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legarea variabilelor

I Modul de asociere a aparit,iei unei variabilecu definit,ia acesteia

I Domeniu de vizibilitate (scope) = mult,imea punctelordin program unde o definit,ie este vizibila, pe bazamodului de legare

I Statica (lexicala) / dinamica

126 / 423

Page 450: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legarea variabilelor

I Modul de asociere a aparit,iei unei variabilecu definit,ia acesteia

I Domeniu de vizibilitate (scope) = mult,imea punctelordin program unde o definit,ie este vizibila, pe bazamodului de legare

I Statica (lexicala) / dinamica

126 / 423

Page 451: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legarea variabilelor

I Modul de asociere a aparit,iei unei variabilecu definit,ia acesteia

I Domeniu de vizibilitate (scope) = mult,imea punctelordin program unde o definit,ie este vizibila, pe bazamodului de legare

I Statica (lexicala) / dinamica

126 / 423

Page 452: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Problema

1 def x = 0

2 f() { return x }

3 def x = 1

4 g() { def x = 2 ; return f() }

I Atent,ie! Variabilele x sunt diferite, nu se reatribuieacelas, i x (aceasta este semnificat,ia lui def)

I În câte moduri poate decurge evaluarea aplicat,ieig(), în raport cu variabilele definite?

127 / 423

Page 453: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Problema

1 def x = 0

2 f() { return x }

3 def x = 1

4 g() { def x = 2 ; return f() }

I Atent,ie! Variabilele x sunt diferite, nu se reatribuieacelas, i x (aceasta este semnificat,ia lui def)

I În câte moduri poate decurge evaluarea aplicat,ieig(), în raport cu variabilele definite?

127 / 423

Page 454: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Problema

1 def x = 0

2 f() { return x }

3 def x = 1

4 g() { def x = 2 ; return f() }

I Atent,ie! Variabilele x sunt diferite, nu se reatribuieacelas, i x (aceasta este semnificat,ia lui def)

I În câte moduri poate decurge evaluarea aplicat,ieig(), în raport cu variabilele definite?

127 / 423

Page 455: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare statica (lexicala)

I Extragerea variabilelor din contextul definirii expresiei

I Domeniu de vizibilitate determinat prin construct,iilelimbajului (lexical), la compilare (static)

1 def x = 0

2 f() { return x }

3 def x = 1

4 g() { def x = 2 ; return f() }

g() → 0

128 / 423

Page 456: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare statica (lexicala)

I Extragerea variabilelor din contextul definirii expresiei

I Domeniu de vizibilitate determinat prin construct,iilelimbajului (lexical), la compilare (static)

1 def x = 0

2 f() { return x }

3 def x = 1

4 g() { def x = 2 ; return f() }

g() → 0

128 / 423

Page 457: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare statica (lexicala)

I Extragerea variabilelor din contextul definirii expresiei

I Domeniu de vizibilitate determinat prin construct,iilelimbajului (lexical), la compilare (static)

1 def x = 0

2 f() { return x }

3 def x = 1

4 g() { def x = 2 ; return f() }

g() → 0

128 / 423

Page 458: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare statica (lexicala)

I Extragerea variabilelor din contextul definirii expresiei

I Domeniu de vizibilitate determinat prin construct,iilelimbajului (lexical), la compilare (static)

1 def x = 0

2 f() { return x }

3 def x = 1

4 g() { def x = 2 ; return f() }

g() → 0

128 / 423

Page 459: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare statica (lexicala)

I Extragerea variabilelor din contextul definirii expresiei

I Domeniu de vizibilitate determinat prin construct,iilelimbajului (lexical), la compilare (static)

1 def x = 0

2 f() { return x }

3 def x = 1

4 g() { def x = 2 ; return f() }

g() → 0

128 / 423

Page 460: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare statica (lexicala)

I Extragerea variabilelor din contextul definirii expresiei

I Domeniu de vizibilitate determinat prin construct,iilelimbajului (lexical), la compilare (static)

1 def x = 0

2 f() { return x }

3 def x = 1

4 g() { def x = 2 ; return f() }

g() → 0

128 / 423

Page 461: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare statica (lexicala)

I Extragerea variabilelor din contextul definirii expresiei

I Domeniu de vizibilitate determinat prin construct,iilelimbajului (lexical), la compilare (static)

1 def x = 0

2 f() { return x }

3 def x = 1

4 g() { def x = 2 ; return f() }

g() → 0

128 / 423

Page 462: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare statica (lexicala)

I Extragerea variabilelor din contextul definirii expresiei

I Domeniu de vizibilitate determinat prin construct,iilelimbajului (lexical), la compilare (static)

1 def x = 0

2 f() { return x }

3 def x = 1

4 g() { def x = 2 ; return f() }

g() → 0

128 / 423

Page 463: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare statica (lexicala)

I Extragerea variabilelor din contextul definirii expresiei

I Domeniu de vizibilitate determinat prin construct,iilelimbajului (lexical), la compilare (static)

1 def x = 0

2 f() { return x }

3 def x = 1

4 g() { def x = 2 ; return f() }

g() →

0

128 / 423

Page 464: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare statica (lexicala)

I Extragerea variabilelor din contextul definirii expresiei

I Domeniu de vizibilitate determinat prin construct,iilelimbajului (lexical), la compilare (static)

1 def x = 0

2 f() { return x }

3 def x = 1

4 g() { def x = 2 ; return f() }

g() → 0

128 / 423

Page 465: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare statica în calculul lambda

Care sunt domeniile de vizibilitate ale parametrilorformali, în expresia de mai jos?

λ x . λ y . (λ x . x y )

129 / 423

Page 466: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare statica în calculul lambda

Care sunt domeniile de vizibilitate ale parametrilorformali, în expresia de mai jos?

λ x . λ y . (λ x . x y )

129 / 423

Page 467: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare statica în calculul lambda

Care sunt domeniile de vizibilitate ale parametrilorformali, în expresia de mai jos?

λ x . λ y . (λ x . x y )

129 / 423

Page 468: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare statica în calculul lambda

Care sunt domeniile de vizibilitate ale parametrilorformali, în expresia de mai jos?

λ x . λ y . (λ x . x y )

129 / 423

Page 469: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare statica în calculul lambda

Care sunt domeniile de vizibilitate ale parametrilorformali, în expresia de mai jos?

λ x . λ y . (λ x . x y )

129 / 423

Page 470: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare statica în calculul lambda

Care sunt domeniile de vizibilitate ale parametrilorformali, în expresia de mai jos?

λ x . λ y . (λ x . x y )

129 / 423

Page 471: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare statica în calculul lambda

Care sunt domeniile de vizibilitate ale parametrilorformali, în expresia de mai jos?

λ x . λ y . (λ x . x y )

129 / 423

Page 472: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare dinamica

I Extragerea variabilelor din contextul evaluarii expr.

I Domeniu de vizibilitate determinat la execut,ie

1 def x = 0

2 f() { return x }

/ f() -> 0

3 def x = 1

/ f() -> 1

4 g() { def x = 2 ; return f() }

/ f() -> 2 <- g()

5 ...

/ f() -> 1

Atent,ie! x-ul portocaliu, vizibil:I spat,ial: în întregul programI temporal: doar pe durata evaluarii corpului lui g()

130 / 423

Page 473: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare dinamica

I Extragerea variabilelor din contextul evaluarii expr.I Domeniu de vizibilitate determinat la execut,ie

1 def x = 0

2 f() { return x }

/ f() -> 0

3 def x = 1

/ f() -> 1

4 g() { def x = 2 ; return f() }

/ f() -> 2 <- g()

5 ...

/ f() -> 1

Atent,ie! x-ul portocaliu, vizibil:I spat,ial: în întregul programI temporal: doar pe durata evaluarii corpului lui g()

130 / 423

Page 474: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare dinamica

I Extragerea variabilelor din contextul evaluarii expr.I Domeniu de vizibilitate determinat la execut,ie

1 def x = 0

2 f() { return x } / f() -> 0

3 def x = 1

/ f() -> 1

4 g() { def x = 2 ; return f() }

/ f() -> 2 <- g()

5 ...

/ f() -> 1

Atent,ie! x-ul portocaliu, vizibil:I spat,ial: în întregul programI temporal: doar pe durata evaluarii corpului lui g()

130 / 423

Page 475: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare dinamica

I Extragerea variabilelor din contextul evaluarii expr.I Domeniu de vizibilitate determinat la execut,ie

1 def x = 0

2 f() { return x }

/

f() -> 0

3 def x = 1 / f() -> 1

4 g() { def x = 2 ; return f() }

/ f() -> 2 <- g()

5 ...

/ f() -> 1

Atent,ie! x-ul portocaliu, vizibil:I spat,ial: în întregul programI temporal: doar pe durata evaluarii corpului lui g()

130 / 423

Page 476: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare dinamica

I Extragerea variabilelor din contextul evaluarii expr.I Domeniu de vizibilitate determinat la execut,ie

1 def x = 0

2 f() { return x }

/

f() -> 0

3 def x = 1

/

f() -> 1

4 g() { def x = 2 ; return f() } / f() -> 2 <- g()

5 ...

/ f() -> 1

Atent,ie! x-ul portocaliu, vizibil:I spat,ial: în întregul programI temporal: doar pe durata evaluarii corpului lui g()

130 / 423

Page 477: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare dinamica

I Extragerea variabilelor din contextul evaluarii expr.I Domeniu de vizibilitate determinat la execut,ie

1 def x = 0

2 f() { return x }

/

f() -> 0

3 def x = 1

/

f() -> 1

4 g() { def x = 2 ; return f() }

/

f() -> 2 <- g()

5 ... / f() -> 1

Atent,ie! x-ul portocaliu, vizibil:I spat,ial: în întregul programI temporal: doar pe durata evaluarii corpului lui g()

130 / 423

Page 478: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare dinamica

I Extragerea variabilelor din contextul evaluarii expr.I Domeniu de vizibilitate determinat la execut,ie

1 def x = 0

2 f() { return x }

/

f() -> 0

3 def x = 1

/

f() -> 1

4 g() { def x = 2 ; return f() }

/

f() -> 2 <- g()

5 ...

/

f() -> 1

Atent,ie! x-ul portocaliu, vizibil:

I spat,ial: în întregul programI temporal: doar pe durata evaluarii corpului lui g()

130 / 423

Page 479: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare dinamica

I Extragerea variabilelor din contextul evaluarii expr.I Domeniu de vizibilitate determinat la execut,ie

1 def x = 0

2 f() { return x }

/

f() -> 0

3 def x = 1

/

f() -> 1

4 g() { def x = 2 ; return f() }

/

f() -> 2 <- g()

5 ...

/

f() -> 1

Atent,ie! x-ul portocaliu, vizibil:I spat,ial: în întregul program

I temporal: doar pe durata evaluarii corpului lui g()

130 / 423

Page 480: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare dinamica

I Extragerea variabilelor din contextul evaluarii expr.I Domeniu de vizibilitate determinat la execut,ie

1 def x = 0

2 f() { return x }

/

f() -> 0

3 def x = 1

/

f() -> 1

4 g() { def x = 2 ; return f() }

/

f() -> 2 <- g()

5 ...

/

f() -> 1

Atent,ie! x-ul portocaliu, vizibil:I spat,ial: în întregul programI temporal: doar pe durata evaluarii corpului lui g()

130 / 423

Page 481: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare mixta

I Variabile locale, staticI Variabile globale, dinamic

1 def x = 0

2 f() { return x }

/ f() -> 0

3 def x = 1

/ f() -> 1

4 g() { def x = 2 ; return f() }

/ f() -> 1 <- g()

5 ...

/ f() -> 1

Atent,ie! x-ul portocaliu, invizibil în corpul lui f!

131 / 423

Page 482: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare mixta

I Variabile locale, staticI Variabile globale, dinamic

1 def x = 0

2 f() { return x } / f() -> 0

3 def x = 1

/ f() -> 1

4 g() { def x = 2 ; return f() }

/ f() -> 1 <- g()

5 ...

/ f() -> 1

Atent,ie! x-ul portocaliu, invizibil în corpul lui f!

131 / 423

Page 483: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare mixta

I Variabile locale, staticI Variabile globale, dinamic

1 def x = 0

2 f() { return x }

/

f() -> 0

3 def x = 1 / f() -> 1

4 g() { def x = 2 ; return f() }

/ f() -> 1 <- g()

5 ...

/ f() -> 1

Atent,ie! x-ul portocaliu, invizibil în corpul lui f!

131 / 423

Page 484: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare mixta

I Variabile locale, staticI Variabile globale, dinamic

1 def x = 0

2 f() { return x }

/

f() -> 0

3 def x = 1

/

f() -> 1

4 g() { def x = 2 ; return f() } / f() -> 1 <- g()

5 ...

/ f() -> 1

Atent,ie! x-ul portocaliu, invizibil în corpul lui f!

131 / 423

Page 485: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare mixta

I Variabile locale, staticI Variabile globale, dinamic

1 def x = 0

2 f() { return x }

/

f() -> 0

3 def x = 1

/

f() -> 1

4 g() { def x = 2 ; return f() }

/

f() -> 1 <- g()

5 ... / f() -> 1

Atent,ie! x-ul portocaliu, invizibil în corpul lui f!

131 / 423

Page 486: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legare mixta

I Variabile locale, staticI Variabile globale, dinamic

1 def x = 0

2 f() { return x }

/

f() -> 0

3 def x = 1

/

f() -> 1

4 g() { def x = 2 ; return f() }

/

f() -> 1 <- g()

5 ...

/

f() -> 1

Atent,ie! x-ul portocaliu, invizibil în corpul lui f!

131 / 423

Page 487: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legarea variabilelor în Racket

I Variabile declarate sau definite în expresii: static:I lambda

I let

I let*

I letrec

I Variabile top-level: dinamic:I define

132 / 423

Page 488: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Legarea variabilelor în Racket

I Variabile declarate sau definite în expresii: static:I lambda

I let

I let*

I letrec

I Variabile top-level: dinamic:I define

132 / 423

Page 489: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia lambdaDefinit,ie

I Leaga static parametrii formali ai unei funct,ii

I Sintaxa:

1 (lambda (p1 ... pk ... pn)

2 expr )

I Domeniul de vizibilitate a parametrului pk = mult,imeapunctelor din corpul funct,iei, expr, în care aparit,iilelui pk sunt libere (v. slide-ul 128)

133 / 423

Page 490: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia lambdaDefinit,ie

I Leaga static parametrii formali ai unei funct,ii

I Sintaxa:

1 (lambda (p1 ... pk ... pn)

2 expr )

I Domeniul de vizibilitate a parametrului pk = mult,imeapunctelor din corpul funct,iei, expr, în care aparit,iilelui pk sunt libere (v. slide-ul 128)

133 / 423

Page 491: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia lambdaDefinit,ie

I Leaga static parametrii formali ai unei funct,ii

I Sintaxa:

1 (lambda (p1 ... pk ... pn)

2 expr )

I Domeniul de vizibilitate a parametrului pk = mult,imeapunctelor din corpul funct,iei, expr, în care aparit,iilelui pk sunt libere (v. slide-ul 128)

133 / 423

Page 492: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia lambdaExemplu

1 (lambda ( x )

2 (x (lambda (y) y)) )

134 / 423

Page 493: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia lambdaExemplu

1 (lambda ( x )

2 (x (lambda (y) y)) )

134 / 423

Page 494: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia lambdaSemantica

I Aplicat,ie:

1 ((lambda (p1 ... pn)

2 expr) a1 ... an)

I Se evalueaza operanzii ak, în ordine aleatoare(evaluare aplicativa)

I Se evalueaza corpul funct,iei, expr, t,inând cont delegarile pk ← valoare(ak)

I Valoarea aplicat,iei este valoarea lui expr

135 / 423

Page 495: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia lambdaSemantica

I Aplicat,ie:

1 ((lambda (p1 ... pn)

2 expr) a1 ... an)

I Se evalueaza operanzii ak, în ordine aleatoare(evaluare aplicativa)

I Se evalueaza corpul funct,iei, expr, t,inând cont delegarile pk ← valoare(ak)

I Valoarea aplicat,iei este valoarea lui expr

135 / 423

Page 496: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia lambdaSemantica

I Aplicat,ie:

1 ((lambda (p1 ... pn)

2 expr) a1 ... an)

I Se evalueaza operanzii ak, în ordine aleatoare(evaluare aplicativa)

I Se evalueaza corpul funct,iei, expr, t,inând cont delegarile pk ← valoare(ak)

I Valoarea aplicat,iei este valoarea lui expr

135 / 423

Page 497: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia lambdaSemantica

I Aplicat,ie:

1 ((lambda (p1 ... pn)

2 expr) a1 ... an)

I Se evalueaza operanzii ak, în ordine aleatoare(evaluare aplicativa)

I Se evalueaza corpul funct,iei, expr, t,inând cont delegarile pk ← valoare(ak)

I Valoarea aplicat,iei este valoarea lui expr

135 / 423

Page 498: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia letDefinit,ie

I Leaga static variabile locale

I Sintaxa:

1 (let ([v1 e1] ... [ vk ek] ... [vn en])

2 expr )

I Domeniul de vizibilitate a variabilei vk = mult,imeapunctelor din corp, expr, în care aparit,iile lui vk suntlibere (v. slide-ul 128)

136 / 423

Page 499: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia letDefinit,ie

I Leaga static variabile locale

I Sintaxa:

1 (let ([v1 e1] ... [ vk ek] ... [vn en])

2 expr )

I Domeniul de vizibilitate a variabilei vk = mult,imeapunctelor din corp, expr, în care aparit,iile lui vk suntlibere (v. slide-ul 128)

136 / 423

Page 500: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia letDefinit,ie

I Leaga static variabile locale

I Sintaxa:

1 (let ([v1 e1] ... [ vk ek] ... [vn en])

2 expr )

I Domeniul de vizibilitate a variabilei vk = mult,imeapunctelor din corp, expr, în care aparit,iile lui vk suntlibere (v. slide-ul 128)

136 / 423

Page 501: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia letExemplu

1 (let ([ x 1] [y 2])

2 (+ x 2) )

137 / 423

Page 502: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia letExemplu

1 (let ([ x 1] [y 2])

2 (+ x 2) )

137 / 423

Page 503: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia letSemantica

1 (let ([v1 e1] ... [vn en])

2 expr)

echivalent cu

1 ((lambda (v1 ... vn)

2 expr) e1 ... en)

138 / 423

Page 504: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia letSemantica

1 (let ([v1 e1] ... [vn en])

2 expr)

echivalent cu

1 ((lambda (v1 ... vn)

2 expr) e1 ... en)

138 / 423

Page 505: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia let*Definit,ie

I Leaga static variabile locale

I Sintaxa:

1 (let* ([v1 e1] ... [ vk ek] ... [vn en] )

2 expr )

I Domeniul de vizibilitate a variabilei vk = mult,imeapunctelor din

I restul legarilor s, iI corp, expr,

în care aparit,iile lui vk sunt libere (v. slide-ul 128)

139 / 423

Page 506: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia let*Definit,ie

I Leaga static variabile locale

I Sintaxa:

1 (let* ([v1 e1] ... [ vk ek] ... [vn en] )

2 expr )

I Domeniul de vizibilitate a variabilei vk = mult,imeapunctelor din

I restul legarilor s, iI corp, expr,

în care aparit,iile lui vk sunt libere (v. slide-ul 128)

139 / 423

Page 507: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia let*Definit,ie

I Leaga static variabile locale

I Sintaxa:

1 (let* ([v1 e1] ... [ vk ek] ... [vn en] )

2 expr )

I Domeniul de vizibilitate a variabilei vk = mult,imeapunctelor din

I restul legarilor s, iI corp, expr,

în care aparit,iile lui vk sunt libere (v. slide-ul 128)

139 / 423

Page 508: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia let*Definit,ie

I Leaga static variabile locale

I Sintaxa:

1 (let* ([v1 e1] ... [ vk ek] ... [vn en] )

2 expr )

I Domeniul de vizibilitate a variabilei vk = mult,imeapunctelor din

I restul legarilor s, i

I corp, expr,

în care aparit,iile lui vk sunt libere (v. slide-ul 128)

139 / 423

Page 509: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia let*Definit,ie

I Leaga static variabile locale

I Sintaxa:

1 (let* ([v1 e1] ... [ vk ek] ... [vn en] )

2 expr )

I Domeniul de vizibilitate a variabilei vk = mult,imeapunctelor din

I restul legarilor s, iI corp, expr,

în care aparit,iile lui vk sunt libere (v. slide-ul 128)

139 / 423

Page 510: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia let*Exemplu

1 (let* ([ x 1] [y x] )

2 (+ x 2) )

140 / 423

Page 511: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia let*Exemplu

1 (let* ([ x 1] [y x] )

2 (+ x 2) )

140 / 423

Page 512: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia let*Semantica

1 (let* ([v1 e1] ... [vn en])

2 expr)

echivalent cu

1 (let ([v1 e1])

2 ...

3 (let ([vn en])

4 expr)...)

Evaluarea expresiilor se face în ordine!

141 / 423

Page 513: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia let*Semantica

1 (let* ([v1 e1] ... [vn en])

2 expr)

echivalent cu

1 (let ([v1 e1])

2 ...

3 (let ([vn en])

4 expr)...)

Evaluarea expresiilor se face în ordine!

141 / 423

Page 514: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia letrecDefinit,ie

I Leaga static variabile locale

I Sintaxa:

1 (letrec ( [v1 e1] ... [ vk ek] ... [vn en] )

2 expr )

I Domeniul de vizibilitate a variabilei vk = mult,imeapunctelor din întreaga construct,ie, în care aparit,iilelui vk sunt libere (v. slide-ul 128)

142 / 423

Page 515: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia letrecDefinit,ie

I Leaga static variabile locale

I Sintaxa:

1 (letrec ( [v1 e1] ... [ vk ek] ... [vn en] )

2 expr )

I Domeniul de vizibilitate a variabilei vk = mult,imeapunctelor din întreaga construct,ie, în care aparit,iilelui vk sunt libere (v. slide-ul 128)

142 / 423

Page 516: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia letrecDefinit,ie

I Leaga static variabile locale

I Sintaxa:

1 (letrec ( [v1 e1] ... [ vk ek] ... [vn en] )

2 expr )

I Domeniul de vizibilitate a variabilei vk = mult,imeapunctelor din întreaga construct,ie, în care aparit,iilelui vk sunt libere (v. slide-ul 128)

142 / 423

Page 517: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia letrecExemplu

1 (letrec ([ factorial

2 (lambda (n)

3 (if (zero? n) 1

4 (* n (factorial (- n 1)))))])

5 (factorial 5))

143 / 423

Page 518: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia letrecExemplu

1 (letrec ([ factorial

2 (lambda (n)

3 (if (zero? n) 1

4 (* n (factorial (- n 1)))))])

5 (factorial 5))

143 / 423

Page 519: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia defineDefinit,ie

I Leaga dinamic variabile top-level (de obicei)

I Sintaxa:

1 (define v expr)

I Domeniul de vizibilitate a variabilei v =întregul program, presupunând ca:

I legarea a fost facuta, în timpul execut,ieiI nicio o alta legare, statica sau dinamica, a lui v,

nu a fost facuta ulterior

144 / 423

Page 520: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia defineDefinit,ie

I Leaga dinamic variabile top-level (de obicei)

I Sintaxa:

1 (define v expr)

I Domeniul de vizibilitate a variabilei v =întregul program, presupunând ca:

I legarea a fost facuta, în timpul execut,ieiI nicio o alta legare, statica sau dinamica, a lui v,

nu a fost facuta ulterior

144 / 423

Page 521: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia defineDefinit,ie

I Leaga dinamic variabile top-level (de obicei)

I Sintaxa:

1 (define v expr)

I Domeniul de vizibilitate a variabilei v =întregul program, presupunând ca:

I legarea a fost facuta, în timpul execut,ieiI nicio o alta legare, statica sau dinamica, a lui v,

nu a fost facuta ulterior

144 / 423

Page 522: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia defineDefinit,ie

I Leaga dinamic variabile top-level (de obicei)

I Sintaxa:

1 (define v expr)

I Domeniul de vizibilitate a variabilei v =întregul program, presupunând ca:

I legarea a fost facuta, în timpul execut,iei

I nicio o alta legare, statica sau dinamica, a lui v,nu a fost facuta ulterior

144 / 423

Page 523: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia defineDefinit,ie

I Leaga dinamic variabile top-level (de obicei)

I Sintaxa:

1 (define v expr)

I Domeniul de vizibilitate a variabilei v =întregul program, presupunând ca:

I legarea a fost facuta, în timpul execut,ieiI nicio o alta legare, statica sau dinamica, a lui v,

nu a fost facuta ulterior

144 / 423

Page 524: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia defineExemple

1 (define x 0)

2 (define f (lambda () x))

3 (f) ; 0

4 (define x 1)

5 (f) ; 1

145 / 423

Page 525: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia defineExemple

1

2 (define f (lambda () x))

3

4 (define x 1)

5 (f) ; 1

145 / 423

Page 526: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia defineExemple

1 (define factorial

2 (lambda (n)

3 (if (zero? n) 1

4 (* n (factorial (- n 1))))))

5

6 (factorial 5)

; 120

7

8 (define g factorial)

9 (define factorial (lambda (x) x))

10

11 (g 5)

; 20

146 / 423

Page 527: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia defineExemple

1 (define factorial

2 (lambda (n)

3 (if (zero? n) 1

4 (* n (factorial (- n 1))))))

5

6 (factorial 5) ; 120

7

8 (define g factorial)

9 (define factorial (lambda (x) x))

10

11 (g 5)

; 20

146 / 423

Page 528: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia defineExemple

1 (define factorial

2 (lambda (n)

3 (if (zero? n) 1

4 (* n (factorial (- n 1))))))

5

6 (factorial 5) ; 120

7

8 (define g factorial)

9 (define factorial (lambda (x) x))

10

11 (g 5) ; 20

146 / 423

Page 529: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia defineSemantica

I Se evalueaza expresia, expr

I Valoarea lui v este valoarea lui expr

I Avantaje:

I definirea variabilelor top-level în orice ordineI definirea funct,iilor mutual recursive

I Dezavantaj: efect de atribuire

147 / 423

Page 530: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia defineSemantica

I Se evalueaza expresia, expr

I Valoarea lui v este valoarea lui expr

I Avantaje:

I definirea variabilelor top-level în orice ordineI definirea funct,iilor mutual recursive

I Dezavantaj: efect de atribuire

147 / 423

Page 531: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia defineSemantica

I Se evalueaza expresia, expr

I Valoarea lui v este valoarea lui expr

I Avantaje:

I definirea variabilelor top-level în orice ordineI definirea funct,iilor mutual recursive

I Dezavantaj: efect de atribuire

147 / 423

Page 532: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia defineSemantica

I Se evalueaza expresia, expr

I Valoarea lui v este valoarea lui expr

I Avantaje:I definirea variabilelor top-level în orice ordine

I definirea funct,iilor mutual recursive

I Dezavantaj: efect de atribuire

147 / 423

Page 533: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia defineSemantica

I Se evalueaza expresia, expr

I Valoarea lui v este valoarea lui expr

I Avantaje:I definirea variabilelor top-level în orice ordineI definirea funct,iilor mutual recursive

I Dezavantaj: efect de atribuire

147 / 423

Page 534: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Construct,ia defineSemantica

I Se evalueaza expresia, expr

I Valoarea lui v este valoarea lui expr

I Avantaje:I definirea variabilelor top-level în orice ordineI definirea funct,iilor mutual recursive

I Dezavantaj: efect de atribuire

147 / 423

Page 535: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemplu mixt

Codificarea secvent,ei de pe slide-ul 131

1 (define x 0)

2 (define f (lambda () x))

3 (define x 1)

4

5 (define g

6 (lambda (x)

7 (f)))

8

9 (g 2)

; 1

148 / 423

Page 536: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemplu mixt

Codificarea secvent,ei de pe slide-ul 131

1 (define x 0)

2 (define f (lambda () x))

3 (define x 1)

4

5 (define g

6 (lambda (x)

7 (f)))

8

9 (g 2) ; 1

148 / 423

Page 537: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Aplicat,ie pentru legarea variabilelor79 (define (app A B)

80 (if (null? A)

81 B

82 (cons (car A) (app (cdr A) B))))

Problema: B este trimis nemodificat fiecarei aplicat,iirecursive. Rescriem:

87 (define (app2 A B )

88 (letrec ([internal

89 (lambda (L)

90 (if (null? L) B

91 (cons (car L)

92 (internal (cdr L)))))])

93 (internal A)))

149 / 423

Page 538: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Aplicat,ie pentru legarea variabilelor79 (define (app A B)

80 (if (null? A)

81 B

82 (cons (car A) (app (cdr A) B))))

Problema: B este trimis nemodificat fiecarei aplicat,iirecursive. Rescriem:

87 (define (app2 A B )

88 (letrec ([internal

89 (lambda (L)

90 (if (null? L) B

91 (cons (car L)

92 (internal (cdr L)))))])

93 (internal A)))

149 / 423

Page 539: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Aplicat,ie pentru legarea variabilelor79 (define (app A B)

80 (if (null? A)

81 B

82 (cons (car A) (app (cdr A) B))))

Problema: B este trimis nemodificat fiecarei aplicat,iirecursive. Rescriem:

87 (define (app2 A B )

88 (letrec ([internal

89 (lambda (L)

90 (if (null? L) B

91 (cons (car L)

92 (internal (cdr L)))))])

93 (internal A)))

149 / 423

Page 540: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Legarea variabilelor

Contexte, închideri, evaluare contextuala

150 / 423

Page 541: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Modelul de evaluare bazat pe substitut,ie

I Ineficient

I Tratament special pentru coliziunile dintre variabilelelibere ale parametrului actual s, i cele legateale corpului funct,iei aplicate

I Imposibil de aplicat, în prezent,a unor eventualereatribuiri ale variabilelor

151 / 423

Page 542: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Modelul de evaluare bazat pe substitut,ie

I Ineficient

I Tratament special pentru coliziunile dintre variabilelelibere ale parametrului actual s, i cele legateale corpului funct,iei aplicate

I Imposibil de aplicat, în prezent,a unor eventualereatribuiri ale variabilelor

151 / 423

Page 543: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Modelul de evaluare bazat pe substitut,ie

I Ineficient

I Tratament special pentru coliziunile dintre variabilelelibere ale parametrului actual s, i cele legateale corpului funct,iei aplicate

I Imposibil de aplicat, în prezent,a unor eventualereatribuiri ale variabilelor

151 / 423

Page 544: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Alternativa la substitut,ia textuala

(λx .x y)→ y

→ 〈x ; {x ← y}〉

·

I Asocierea unei expresii cu un dict,ionar de variabilelibere: context de evaluare

expresie context

I Cautarea unei variabile utilizate în procesulde evaluare, în contextul asociat

I Perechea: închidere, i.e. forma pseudoînchisaa expresiei, obt,inuta prin legarea variabilelor libere

închidere

152 / 423

Page 545: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Alternativa la substitut,ia textuala

(λx .x y) 6→ y→ 〈x ; {x ← y}〉

·

I Asocierea unei expresii cu un dict,ionar de variabilelibere: context de evaluare

expresie context

I Cautarea unei variabile utilizate în procesulde evaluare, în contextul asociat

I Perechea: închidere, i.e. forma pseudoînchisaa expresiei, obt,inuta prin legarea variabilelor libere

închidere

152 / 423

Page 546: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Alternativa la substitut,ia textuala

(λx .x y) 6→ y→ 〈x ; {x ← y}〉

·

I Asocierea unei expresii cu un dict,ionar de variabilelibere: context de evaluare

expresie context

I Cautarea unei variabile utilizate în procesulde evaluare, în contextul asociat

I Perechea: închidere, i.e. forma pseudoînchisaa expresiei, obt,inuta prin legarea variabilelor libere

închidere

152 / 423

Page 547: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Alternativa la substitut,ia textuala

(λx .x y) 6→ y→ 〈x ; {x ← y}〉

·

I Asocierea unei expresii cu un dict,ionar de variabilelibere: context de evaluare

expresie context

I Cautarea unei variabile utilizate în procesulde evaluare, în contextul asociat

I Perechea: închidere, i.e. forma pseudoînchisaa expresiei, obt,inuta prin legarea variabilelor libere

închidere

152 / 423

Page 548: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Context computat,ional

I Mult,ime de variabile, alaturi de valorile acestora

I Dependent de punctul din program s, i de momentulde timp

I Legare statica — mult,imea variabilelor care cont,inpunctul conform structurii lexicale a programului1 (let ([ x 1])

2 (+ x (let ([ y 2])

3 (* x y) )))

I Legare dinamica — mult,imea variabilelor definitecel mai recent

153 / 423

Page 549: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Context computat,ional

I Mult,ime de variabile, alaturi de valorile acestora

I Dependent de punctul din program s, i de momentulde timp

I Legare statica — mult,imea variabilelor care cont,inpunctul conform structurii lexicale a programului1 (let ([ x 1])

2 (+ x (let ([ y 2])

3 (* x y) )))

I Legare dinamica — mult,imea variabilelor definitecel mai recent

153 / 423

Page 550: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Context computat,ional

I Mult,ime de variabile, alaturi de valorile acestora

I Dependent de punctul din program s, i de momentulde timp

I Legare statica — mult,imea variabilelor care cont,inpunctul conform structurii lexicale a programului1 (let ([ x 1])

2 (+ x (let ([ y 2])

3 (* x y) )))

I Legare dinamica — mult,imea variabilelor definitecel mai recent

153 / 423

Page 551: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Context computat,ional

I Mult,ime de variabile, alaturi de valorile acestora

I Dependent de punctul din program s, i de momentulde timp

I Legare statica — mult,imea variabilelor care cont,inpunctul conform structurii lexicale a programului1 (let ([ x 1])

2 (+ x (let ([ y 2])

3 (* x y) )))

I Legare dinamica — mult,imea variabilelor definitecel mai recent

153 / 423

Page 552: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Context computat,ional

I Mult,ime de variabile, alaturi de valorile acestora

I Dependent de punctul din program s, i de momentulde timp

I Legare statica — mult,imea variabilelor care cont,inpunctul conform structurii lexicale a programului1 (let ([ x 1])

2 (+ x (let ([ y 2])

3 (* x y) )))

I Legare dinamica — mult,imea variabilelor definitecel mai recent

153 / 423

Page 553: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Context computat,ional

I Mult,ime de variabile, alaturi de valorile acestora

I Dependent de punctul din program s, i de momentulde timp

I Legare statica — mult,imea variabilelor care cont,inpunctul conform structurii lexicale a programului1 (let ([ x 1])

2 (+ x (let ([ y 2])

3 (* x y) )))

I Legare dinamica — mult,imea variabilelor definitecel mai recent

153 / 423

Page 554: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Context computat,ional

I Mult,ime de variabile, alaturi de valorile acestora

I Dependent de punctul din program s, i de momentulde timp

I Legare statica — mult,imea variabilelor care cont,inpunctul conform structurii lexicale a programului1 (let ([ x 1])

2 (+ x (let ([ y 2])

3 (* x y) )))

I Legare dinamica — mult,imea variabilelor definitecel mai recent

153 / 423

Page 555: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Context computat,ional

I Mult,ime de variabile, alaturi de valorile acestora

I Dependent de punctul din program s, i de momentulde timp

I Legare statica — mult,imea variabilelor care cont,inpunctul conform structurii lexicale a programului1 (let ([ x 1])

2 (+ x (let ([ y 2])

3 (* x y) )))

I Legare dinamica — mult,imea variabilelor definitecel mai recent

{x ← 1}

153 / 423

Page 556: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Context computat,ional

I Mult,ime de variabile, alaturi de valorile acestora

I Dependent de punctul din program s, i de momentulde timp

I Legare statica — mult,imea variabilelor care cont,inpunctul conform structurii lexicale a programului1 (let ([ x 1])

2 (+ x (let ([ y 2])

3 (* x y) )))

I Legare dinamica — mult,imea variabilelor definitecel mai recent

{x ← 1}

{x ← 1,y ← 2}

153 / 423

Page 557: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Context computat,ional

I Mult,ime de variabile, alaturi de valorile acestora

I Dependent de punctul din program s, i de momentulde timp

I Legare statica — mult,imea variabilelor care cont,inpunctul conform structurii lexicale a programului1 (let ([ x 1])

2 (+ x (let ([ y 2])

3 (* x y) )))

I Legare dinamica — mult,imea variabilelor definitecel mai recent

{x ← 1}

{x ← 1,y ← 2}

153 / 423

Page 558: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ÎnchideriDefinit,ie

I Închidere: pereche expresie-context

I Semnificat,ia unei închideri:

〈e; C〉

este valoarea expresiei e, în contextul C

I Închidere funct,ionala:

〈λx .e; C〉

este o funct,ie care îs, i salveaza contextul,pe care îl utilizeaza, în momentul aplicarii,pentru evaluarea corpului

I Utilizate pentru legare statica!

154 / 423

Page 559: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ÎnchideriDefinit,ie

I Închidere: pereche expresie-context

I Semnificat,ia unei închideri:

〈e; C〉

este valoarea expresiei e, în contextul C

I Închidere funct,ionala:

〈λx .e; C〉

este o funct,ie care îs, i salveaza contextul,pe care îl utilizeaza, în momentul aplicarii,pentru evaluarea corpului

I Utilizate pentru legare statica!

154 / 423

Page 560: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ÎnchideriDefinit,ie

I Închidere: pereche expresie-context

I Semnificat,ia unei închideri:

〈e; C〉

este valoarea expresiei e, în contextul C

I Închidere funct,ionala:

〈λx .e; C〉

este o funct,ie care îs, i salveaza contextul,pe care îl utilizeaza, în momentul aplicarii,pentru evaluarea corpului

I Utilizate pentru legare statica!

154 / 423

Page 561: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ÎnchideriDefinit,ie

I Închidere: pereche expresie-context

I Semnificat,ia unei închideri:

〈e; C〉

este valoarea expresiei e, în contextul C

I Închidere funct,ionala:

〈λx .e; C〉

este o funct,ie care îs, i salveaza contextul,pe care îl utilizeaza, în momentul aplicarii,pentru evaluarea corpului

I Utilizate pentru legare statica!154 / 423

Page 562: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ÎnchideriConstruct,ie

1. Construct,ie prin evaluarea unei expresii lambda,într-un context dat

2. Legarea variabilelor top-level, în contextul global,prin define

1 (define y 0)

2 (define sum (lambda (x) (+ x y)))

y ← 0sum← 〈λx .(+ x y); 〉

Contextul global

Pointer catre contextul global

155 / 423

Page 563: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ÎnchideriConstruct,ie

1. Construct,ie prin evaluarea unei expresii lambda,într-un context dat

2. Legarea variabilelor top-level, în contextul global,prin define

1 (define y 0)

2 (define sum (lambda (x) (+ x y)))

y ← 0sum←

〈λx .(+ x y); 〉 Contextul global

Pointer catre contextul global

155 / 423

Page 564: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ÎnchideriConstruct,ie

1. Construct,ie prin evaluarea unei expresii lambda,într-un context dat

2. Legarea variabilelor top-level, în contextul global,prin define

1 (define y 0)

2 (define sum (lambda (x) (+ x y)))

y ← 0sum← 〈λx .(+ x y); 〉 Contextul global

Pointer catre contextul global

155 / 423

Page 565: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ÎnchideriAplicare

1. Legarea parametrilor formali, într-un nou context,la valorile parametrilor actuali

2. Mos, tenirea contextului din închidere de catre cel nou

3. Evaluarea corpului închiderii în noul context

1 (sum (+ 1 2))

y ← 0sum← 〈λx .(+ x y); 〉 Contextul globalG

x ← 3

Contextul în care se evalueaza corpul (+ x y)

C

Mos, tenire

156 / 423

Page 566: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ÎnchideriAplicare

1. Legarea parametrilor formali, într-un nou context,la valorile parametrilor actuali

2. Mos, tenirea contextului din închidere de catre cel nou

3. Evaluarea corpului închiderii în noul context

1 (sum (+ 1 2))

y ← 0sum← 〈λx .(+ x y); 〉 Contextul globalG

x ← 3

Contextul în care se evalueaza corpul (+ x y)

C

Mos, tenire

156 / 423

Page 567: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ÎnchideriAplicare

1. Legarea parametrilor formali, într-un nou context,la valorile parametrilor actuali

2. Mos, tenirea contextului din închidere de catre cel nou

3. Evaluarea corpului închiderii în noul context

1 (sum (+ 1 2))

y ← 0sum← 〈λx .(+ x y); 〉 Contextul globalG

x ← 3

Contextul în care se evalueaza corpul (+ x y)

C

Mos, tenire

156 / 423

Page 568: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ÎnchideriAplicare

1. Legarea parametrilor formali, într-un nou context,la valorile parametrilor actuali

2. Mos, tenirea contextului din închidere de catre cel nou

3. Evaluarea corpului închiderii în noul context

1 (sum (+ 1 2))

y ← 0sum← 〈λx .(+ x y); 〉 Contextul globalG

x ← 3Contextul în care se evalueaza corpul (+ x y)

C

Mos, tenire

156 / 423

Page 569: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Ierarhia de contexte

I Arbore având contextul global drept radacina

I În cazul absent,ei unei variabile din contextul curent,cautarea acesteia în contextul parinte s, .a.m.d.

I Pe slide-ul 156:

I x : identificat în CI y : absent din C, dar identificat în G, parintele lui C

157 / 423

Page 570: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Ierarhia de contexte

I Arbore având contextul global drept radacina

I În cazul absent,ei unei variabile din contextul curent,cautarea acesteia în contextul parinte s, .a.m.d.

I Pe slide-ul 156:

I x : identificat în CI y : absent din C, dar identificat în G, parintele lui C

157 / 423

Page 571: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Ierarhia de contexte

I Arbore având contextul global drept radacina

I În cazul absent,ei unei variabile din contextul curent,cautarea acesteia în contextul parinte s, .a.m.d.

I Pe slide-ul 156:

I x : identificat în CI y : absent din C, dar identificat în G, parintele lui C

157 / 423

Page 572: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Ierarhia de contexte

I Arbore având contextul global drept radacina

I În cazul absent,ei unei variabile din contextul curent,cautarea acesteia în contextul parinte s, .a.m.d.

I Pe slide-ul 156:I x : identificat în C

I y : absent din C, dar identificat în G, parintele lui C

157 / 423

Page 573: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Ierarhia de contexte

I Arbore având contextul global drept radacina

I În cazul absent,ei unei variabile din contextul curent,cautarea acesteia în contextul parinte s, .a.m.d.

I Pe slide-ul 156:I x : identificat în CI y : absent din C, dar identificat în G, parintele lui C

157 / 423

Page 574: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Închideri funct,ionaleExemplu

1 (define comp

2 (lambda (f)

3 (lambda (g)

4 (lambda (x)

5 (f (g x))))))

6

7 (define inc (lambda (x) (+ x 1)))

8 (define comp-inc (comp inc))

9

10 (define double (lambda (x) (* x 2)))

11 (define comp-inc-double (comp-inc double))

12

13 (comp-inc-double 5) ; 11

14

15 (define inc (lambda (x) x))

16 (comp-inc-double 5) ; tot 11!

158 / 423

Page 575: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Închideri funct,ionaleExplicat,ia exemplului

comp← 〈λ fgx .(f (g x)); 〉inc← 〈λx .(+ x 1); 〉comp-inc← 〈λgx .(f (g x)); 〉double← 〈λx .(∗ x 2); 〉comp-inc-double← 〈λx .(f (g x)); 〉

f ←inc︷ ︸︸ ︷

〈λx .(+ x 1); 〉

g← 〈λx .(∗ x 2); 〉︸ ︷︷ ︸double

159 / 423

Page 576: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Închideri funct,ionaleExplicat,ia exemplului

comp← 〈λ fgx .(f (g x)); 〉

inc← 〈λx .(+ x 1); 〉comp-inc← 〈λgx .(f (g x)); 〉double← 〈λx .(∗ x 2); 〉comp-inc-double← 〈λx .(f (g x)); 〉

f ←inc︷ ︸︸ ︷

〈λx .(+ x 1); 〉

g← 〈λx .(∗ x 2); 〉︸ ︷︷ ︸double

159 / 423

Page 577: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Închideri funct,ionaleExplicat,ia exemplului

comp← 〈λ fgx .(f (g x)); 〉inc← 〈λx .(+ x 1); 〉

comp-inc← 〈λgx .(f (g x)); 〉double← 〈λx .(∗ x 2); 〉comp-inc-double← 〈λx .(f (g x)); 〉

f ←inc︷ ︸︸ ︷

〈λx .(+ x 1); 〉

g← 〈λx .(∗ x 2); 〉︸ ︷︷ ︸double

159 / 423

Page 578: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Închideri funct,ionaleExplicat,ia exemplului

comp← 〈λ fgx .(f (g x)); 〉inc← 〈λx .(+ x 1); 〉comp-inc← 〈λgx .(f (g x)); 〉

double← 〈λx .(∗ x 2); 〉comp-inc-double← 〈λx .(f (g x)); 〉

f ←inc︷ ︸︸ ︷

〈λx .(+ x 1); 〉

g← 〈λx .(∗ x 2); 〉︸ ︷︷ ︸double

159 / 423

Page 579: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Închideri funct,ionaleExplicat,ia exemplului

comp← 〈λ fgx .(f (g x)); 〉inc← 〈λx .(+ x 1); 〉comp-inc← 〈λgx .(f (g x)); 〉

double← 〈λx .(∗ x 2); 〉comp-inc-double← 〈λx .(f (g x)); 〉

f ←inc︷ ︸︸ ︷

〈λx .(+ x 1); 〉

g← 〈λx .(∗ x 2); 〉︸ ︷︷ ︸double

159 / 423

Page 580: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Închideri funct,ionaleExplicat,ia exemplului

comp← 〈λ fgx .(f (g x)); 〉inc← 〈λx .(+ x 1); 〉comp-inc← 〈λgx .(f (g x)); 〉

double← 〈λx .(∗ x 2); 〉comp-inc-double← 〈λx .(f (g x)); 〉

f ←inc︷ ︸︸ ︷

〈λx .(+ x 1); 〉

g← 〈λx .(∗ x 2); 〉︸ ︷︷ ︸double

159 / 423

Page 581: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Închideri funct,ionaleExplicat,ia exemplului

comp← 〈λ fgx .(f (g x)); 〉inc← 〈λx .(+ x 1); 〉comp-inc← 〈λgx .(f (g x)); 〉

double← 〈λx .(∗ x 2); 〉comp-inc-double← 〈λx .(f (g x)); 〉

f ←inc︷ ︸︸ ︷

〈λx .(+ x 1); 〉

g← 〈λx .(∗ x 2); 〉︸ ︷︷ ︸double

159 / 423

Page 582: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Închideri funct,ionaleExplicat,ia exemplului

comp← 〈λ fgx .(f (g x)); 〉inc← 〈λx .(+ x 1); 〉comp-inc← 〈λgx .(f (g x)); 〉double← 〈λx .(∗ x 2); 〉

comp-inc-double← 〈λx .(f (g x)); 〉

f ←inc︷ ︸︸ ︷

〈λx .(+ x 1); 〉

g← 〈λx .(∗ x 2); 〉︸ ︷︷ ︸double

159 / 423

Page 583: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Închideri funct,ionaleExplicat,ia exemplului

comp← 〈λ fgx .(f (g x)); 〉inc← 〈λx .(+ x 1); 〉comp-inc← 〈λgx .(f (g x)); 〉double← 〈λx .(∗ x 2); 〉comp-inc-double← 〈λx .(f (g x)); 〉

f ←inc︷ ︸︸ ︷

〈λx .(+ x 1); 〉

g← 〈λx .(∗ x 2); 〉︸ ︷︷ ︸double

159 / 423

Page 584: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Închideri funct,ionaleExplicat,ia exemplului

comp← 〈λ fgx .(f (g x)); 〉inc← 〈λx .(+ x 1); 〉comp-inc← 〈λgx .(f (g x)); 〉double← 〈λx .(∗ x 2); 〉comp-inc-double← 〈λx .(f (g x)); 〉

f ←inc︷ ︸︸ ︷

〈λx .(+ x 1); 〉

g← 〈λx .(∗ x 2); 〉︸ ︷︷ ︸double

159 / 423

Page 585: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Închideri funct,ionaleExplicat,ia exemplului

comp← 〈λ fgx .(f (g x)); 〉inc← 〈λx .(+ x 1); 〉comp-inc← 〈λgx .(f (g x)); 〉double← 〈λx .(∗ x 2); 〉comp-inc-double← 〈λx .(f (g x)); 〉

f ←inc︷ ︸︸ ︷

〈λx .(+ x 1); 〉

g← 〈λx .(∗ x 2); 〉︸ ︷︷ ︸double

159 / 423

Page 586: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Închideri funct,ionaleExplicat,ia exemplului

comp← 〈λ fgx .(f (g x)); 〉inc← 〈λx .(+ x 1); 〉comp-inc← 〈λgx .(f (g x)); 〉double← 〈λx .(∗ x 2); 〉comp-inc-double← 〈λx .(f (g x)); 〉

f ←inc︷ ︸︸ ︷

〈λx .(+ x 1); 〉

g← 〈λx .(∗ x 2); 〉︸ ︷︷ ︸double

159 / 423

Page 587: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Rezumat

I Legare statica/ dinamica a variabilelor

I Contexte de evaluare, închideri, evaluare contextuala

160 / 423

Page 588: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Partea VI

Întârzierea evaluarii

161 / 423

Page 589: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Mecanisme

Abstractizare de date

Fluxuri

Rezolvarea problemelor prin cautare lenes, aîn spat,iul starilor

162 / 423

Page 590: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Mecanisme

Abstractizare de date

Fluxuri

Rezolvarea problemelor prin cautare lenes, aîn spat,iul starilor

163 / 423

Page 591: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Motivat,ie

I Sa se implementeze funct,ia prod :I prod(false,y) = 0I prod(true,y) = y(y + 1)

I Se presupune ca evaluarea lui y este costistisitoare,s, i ca ar trebui efectuata doar daca este necesar.

164 / 423

Page 592: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Motivat,ie

I Sa se implementeze funct,ia prod :I prod(false,y) = 0I prod(true,y) = y(y + 1)

I Se presupune ca evaluarea lui y este costistisitoare,s, i ca ar trebui efectuata doar daca este necesar.

164 / 423

Page 593: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Varianta 1Implementare directa

1 (define (prod x y)

2 (if x (* y (+ y 1)) 0))

3

4 (define (test x)

5 (let ([y 5])

6 (prod x (begin (display "y") y))))

7

8 (test #f) ; y 0

9 (test #t) ; y 30

Implementare eronata, deoarece ambii parametrisunt evaluat,i în momentul aplicarii!

165 / 423

Page 594: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Varianta 1Implementare directa

1 (define (prod x y)

2 (if x (* y (+ y 1)) 0))

3

4 (define (test x)

5 (let ([y 5])

6 (prod x (begin (display "y") y))))

7

8 (test #f) ; y 0

9 (test #t) ; y 30

Implementare eronata, deoarece ambii parametrisunt evaluat,i în momentul aplicarii!

165 / 423

Page 595: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Varianta 2quote & eval

1 (define (prod x y)

2 (if x (* ( eval y) (+ ( eval y) 1)) 0))

3

4 (define (test x)

5 (let ([y 5])

6 (prod x ’ (begin (display "y") y))))

7

8 (test #f) ; 0

9 (test #t) ; y y: undefined

I x = #f — comportament corect, y neevaluatI x = #t — eroare, quote nu salveaza contextul

166 / 423

Page 596: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Varianta 2quote & eval

1 (define (prod x y)

2 (if x (* ( eval y) (+ ( eval y) 1)) 0))

3

4 (define (test x)

5 (let ([y 5])

6 (prod x ’ (begin (display "y") y))))

7

8 (test #f) ; 0

9 (test #t) ; y y: undefined

I x = #f — comportament corect, y neevaluat

I x = #t — eroare, quote nu salveaza contextul

166 / 423

Page 597: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Varianta 2quote & eval

1 (define (prod x y)

2 (if x (* ( eval y) (+ ( eval y) 1)) 0))

3

4 (define (test x)

5 (let ([y 5])

6 (prod x ’ (begin (display "y") y))))

7

8 (test #f) ; 0

9 (test #t) ; y y: undefined

I x = #f — comportament corect, y neevaluatI x = #t — eroare, quote nu salveaza contextul

166 / 423

Page 598: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Varianta 3Închideri funct,ionale

1 (define (prod x y)

2 (if x (* (y) (+ (y) 1)) 0))

3

4 (define (test x)

5 (let ([y 5])

6 (prod x ( lambda ()

7 (begin (display "y") y)))))

8

9 (test #f) ; 0

10 (test #t) ; yy 30

I Comportament corect: y evaluat la cerereI x = #t — y evaluat de 2 ori, ineficient

167 / 423

Page 599: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Varianta 3Închideri funct,ionale

1 (define (prod x y)

2 (if x (* (y) (+ (y) 1)) 0))

3

4 (define (test x)

5 (let ([y 5])

6 (prod x ( lambda ()

7 (begin (display "y") y)))))

8

9 (test #f) ; 0

10 (test #t) ; yy 30

I Comportament corect: y evaluat la cerere

I x = #t — y evaluat de 2 ori, ineficient

167 / 423

Page 600: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Varianta 3Închideri funct,ionale

1 (define (prod x y)

2 (if x (* (y) (+ (y) 1)) 0))

3

4 (define (test x)

5 (let ([y 5])

6 (prod x ( lambda ()

7 (begin (display "y") y)))))

8

9 (test #f) ; 0

10 (test #t) ; yy 30

I Comportament corect: y evaluat la cerereI x = #t — y evaluat de 2 ori, ineficient

167 / 423

Page 601: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Varianta 4Promisiuni: delay & force

1 (define (prod x y)

2 (if x (* ( force y) (+ ( force y) 1)) 0))

3

4 (define (test x)

5 (let ([y 5])

6 (prod x ( delay (begin (display "y") y)))))

7

8 (test #f) ; 0

9 (test #t) ; y 30

Comportament corect: y evaluat la cerere, o singura data— evaluare lenes, a

168 / 423

Page 602: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Varianta 4Promisiuni: delay & force

1 (define (prod x y)

2 (if x (* ( force y) (+ ( force y) 1)) 0))

3

4 (define (test x)

5 (let ([y 5])

6 (prod x ( delay (begin (display "y") y)))))

7

8 (test #f) ; 0

9 (test #t) ; y 30

Comportament corect: y evaluat la cerere, o singura data

— evaluare lenes, a

168 / 423

Page 603: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Varianta 4Promisiuni: delay & force

1 (define (prod x y)

2 (if x (* ( force y) (+ ( force y) 1)) 0))

3

4 (define (test x)

5 (let ([y 5])

6 (prod x ( delay (begin (display "y") y)))))

7

8 (test #f) ; 0

9 (test #t) ; y 30

Comportament corect: y evaluat la cerere, o singura data— evaluare lenes, a

168 / 423

Page 604: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

PromisiuniDescriere

I Rezultatul înca neevaluat al unei expresii

I Exemplu: (delay (* 5 6))

I Valori de prim rang în limbaj (v. slide-ul 96)

I delay

I construies, te o promisiuneI funct,ie nestricta

I force

I fort,eaza respectarea unei promisiuni, evaluândexpresia doar la prima aplicare, s, i salvându-i valoarea

I începând cu a doua invocare, întoarce, direct,valoarea memorata

169 / 423

Page 605: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

PromisiuniDescriere

I Rezultatul înca neevaluat al unei expresii

I Exemplu: (delay (* 5 6))

I Valori de prim rang în limbaj (v. slide-ul 96)

I delay

I construies, te o promisiuneI funct,ie nestricta

I force

I fort,eaza respectarea unei promisiuni, evaluândexpresia doar la prima aplicare, s, i salvându-i valoarea

I începând cu a doua invocare, întoarce, direct,valoarea memorata

169 / 423

Page 606: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

PromisiuniDescriere

I Rezultatul înca neevaluat al unei expresii

I Exemplu: (delay (* 5 6))

I Valori de prim rang în limbaj (v. slide-ul 96)

I delay

I construies, te o promisiuneI funct,ie nestricta

I force

I fort,eaza respectarea unei promisiuni, evaluândexpresia doar la prima aplicare, s, i salvându-i valoarea

I începând cu a doua invocare, întoarce, direct,valoarea memorata

169 / 423

Page 607: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

PromisiuniDescriere

I Rezultatul înca neevaluat al unei expresii

I Exemplu: (delay (* 5 6))

I Valori de prim rang în limbaj (v. slide-ul 96)

I delay

I construies, te o promisiuneI funct,ie nestricta

I force

I fort,eaza respectarea unei promisiuni, evaluândexpresia doar la prima aplicare, s, i salvându-i valoarea

I începând cu a doua invocare, întoarce, direct,valoarea memorata

169 / 423

Page 608: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

PromisiuniDescriere

I Rezultatul înca neevaluat al unei expresii

I Exemplu: (delay (* 5 6))

I Valori de prim rang în limbaj (v. slide-ul 96)

I delay

I construies, te o promisiune

I funct,ie nestricta

I force

I fort,eaza respectarea unei promisiuni, evaluândexpresia doar la prima aplicare, s, i salvându-i valoarea

I începând cu a doua invocare, întoarce, direct,valoarea memorata

169 / 423

Page 609: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

PromisiuniDescriere

I Rezultatul înca neevaluat al unei expresii

I Exemplu: (delay (* 5 6))

I Valori de prim rang în limbaj (v. slide-ul 96)

I delay

I construies, te o promisiuneI funct,ie nestricta

I force

I fort,eaza respectarea unei promisiuni, evaluândexpresia doar la prima aplicare, s, i salvându-i valoarea

I începând cu a doua invocare, întoarce, direct,valoarea memorata

169 / 423

Page 610: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

PromisiuniDescriere

I Rezultatul înca neevaluat al unei expresii

I Exemplu: (delay (* 5 6))

I Valori de prim rang în limbaj (v. slide-ul 96)

I delay

I construies, te o promisiuneI funct,ie nestricta

I force

I fort,eaza respectarea unei promisiuni, evaluândexpresia doar la prima aplicare, s, i salvându-i valoarea

I începând cu a doua invocare, întoarce, direct,valoarea memorata

169 / 423

Page 611: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

PromisiuniDescriere

I Rezultatul înca neevaluat al unei expresii

I Exemplu: (delay (* 5 6))

I Valori de prim rang în limbaj (v. slide-ul 96)

I delay

I construies, te o promisiuneI funct,ie nestricta

I force

I fort,eaza respectarea unei promisiuni, evaluândexpresia doar la prima aplicare, s, i salvându-i valoarea

I începând cu a doua invocare, întoarce, direct,valoarea memorata

169 / 423

Page 612: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

PromisiuniDescriere

I Rezultatul înca neevaluat al unei expresii

I Exemplu: (delay (* 5 6))

I Valori de prim rang în limbaj (v. slide-ul 96)

I delay

I construies, te o promisiuneI funct,ie nestricta

I force

I fort,eaza respectarea unei promisiuni, evaluândexpresia doar la prima aplicare, s, i salvându-i valoarea

I începând cu a doua invocare, întoarce, direct,valoarea memorata

169 / 423

Page 613: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Observat,ii

I Dependent,a între mecanismul de întârziere s, i cel deevaluare ulterioara a expresiilor — închideri/ aplicat,ii(varianta 3), delay/ force (varianta 4) etc.

I Numar mare de modificari la înlocuireaunui mecanism existent, utilizat de un numar marede funct,ii

I Cum se pot diminua dependent,ele?

170 / 423

Page 614: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Mecanisme

Abstractizare de date

Fluxuri

Rezolvarea problemelor prin cautare lenes, aîn spat,iul starilor

171 / 423

Page 615: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abstractizare de date I

I Cum reprezentam expresiile cu evaluare întârziata?

I Abordarea din sect,iunea precedenta: 1 singur nivel

Expresii cu evaluare întârziata:utilizare s, i implementare,

sub forma de închideri sau promisiuni

172 / 423

Page 616: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abstractizare de date III Alternativ: 2 nivele,

separate de o bariera de abstractizare

Expresii cu evaluare întârziata,ca entitat,i autonome:

utilizare

Expresii cu evaluare întârziata,ca închideri funct,ionale sau promisiuni:

implementare

Interfat,a: pack, unpack

I Bariera:I limiteaza analiza detaliilorI elimina dependent,ele dintre nivele

173 / 423

Page 617: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abstractizare de date III

I Tehnica de separare a utilizarii unei structuri de datede implementarea acesteia.

I Permit wishful thinking: utilizarea structurii înainteaimplementarii acesteia

174 / 423

Page 618: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Abstractizare de date IV

1 (define-syntax-rule ( pack expr)

2 (delay expr)) ; sau (lambda () expr)

3

4 (define unpack force) ; sau (lambda (p) (p))

5

6 (define (prod x y)

7 (if x (* ( unpack y) (+ ( unpack y) 1)) 0))

8

9 (define (test x)

10 (let ([y 5])

11 (prod x ( pack (begin (display "y") y)))))

175 / 423

Page 619: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Mecanisme

Abstractizare de date

Fluxuri

Rezolvarea problemelor prin cautare lenes, aîn spat,iul starilor

176 / 423

Page 620: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Motivat,ie

Sa se determine suma numerelor pare din intervalul [a,b].

1 (define (even-sum-iter a b)

2 (let iter ([n a]

3 [sum 0])

4 (cond [(> n b) sum]

5 [(even? n) (iter (+ n 1) (+ sum n))]

6 [else (iter (+ n 1) sum)])))

7

8 (define (even-sum-lists a b)

9 (foldl + 0 (filter even? (interval a b))))

177 / 423

Page 621: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Comparat,ie

I Varianta iterativa (d.p.d.v. proces):

I eficienta, datorita spat,iului suplimentar constantI nu foarte lizibila

I Varianta pe liste:

I eleganta s, i concisaI ineficienta, datorita

I spat,iului posibil mare ocupat la un moment dat— toate numerele din intervalul [a,b]

I parcurgerii repetate a intervalului(interval, filter, foldl)

I Cum îmbinam avantajele celor doua abordari?

178 / 423

Page 622: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Comparat,ie

I Varianta iterativa (d.p.d.v. proces):I eficienta, datorita spat,iului suplimentar constant

I nu foarte lizibila

I Varianta pe liste:

I eleganta s, i concisaI ineficienta, datorita

I spat,iului posibil mare ocupat la un moment dat— toate numerele din intervalul [a,b]

I parcurgerii repetate a intervalului(interval, filter, foldl)

I Cum îmbinam avantajele celor doua abordari?

178 / 423

Page 623: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Comparat,ie

I Varianta iterativa (d.p.d.v. proces):I eficienta, datorita spat,iului suplimentar constantI nu foarte lizibila

I Varianta pe liste:

I eleganta s, i concisaI ineficienta, datorita

I spat,iului posibil mare ocupat la un moment dat— toate numerele din intervalul [a,b]

I parcurgerii repetate a intervalului(interval, filter, foldl)

I Cum îmbinam avantajele celor doua abordari?

178 / 423

Page 624: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Comparat,ie

I Varianta iterativa (d.p.d.v. proces):I eficienta, datorita spat,iului suplimentar constantI nu foarte lizibila

I Varianta pe liste:

I eleganta s, i concisaI ineficienta, datorita

I spat,iului posibil mare ocupat la un moment dat— toate numerele din intervalul [a,b]

I parcurgerii repetate a intervalului(interval, filter, foldl)

I Cum îmbinam avantajele celor doua abordari?

178 / 423

Page 625: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Comparat,ie

I Varianta iterativa (d.p.d.v. proces):I eficienta, datorita spat,iului suplimentar constantI nu foarte lizibila

I Varianta pe liste:I eleganta s, i concisa

I ineficienta, datorita

I spat,iului posibil mare ocupat la un moment dat— toate numerele din intervalul [a,b]

I parcurgerii repetate a intervalului(interval, filter, foldl)

I Cum îmbinam avantajele celor doua abordari?

178 / 423

Page 626: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Comparat,ie

I Varianta iterativa (d.p.d.v. proces):I eficienta, datorita spat,iului suplimentar constantI nu foarte lizibila

I Varianta pe liste:I eleganta s, i concisaI ineficienta, datorita

I spat,iului posibil mare ocupat la un moment dat— toate numerele din intervalul [a,b]

I parcurgerii repetate a intervalului(interval, filter, foldl)

I Cum îmbinam avantajele celor doua abordari?

178 / 423

Page 627: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Comparat,ie

I Varianta iterativa (d.p.d.v. proces):I eficienta, datorita spat,iului suplimentar constantI nu foarte lizibila

I Varianta pe liste:I eleganta s, i concisaI ineficienta, datorita

I spat,iului posibil mare ocupat la un moment dat— toate numerele din intervalul [a,b]

I parcurgerii repetate a intervalului(interval, filter, foldl)

I Cum îmbinam avantajele celor doua abordari?

178 / 423

Page 628: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Comparat,ie

I Varianta iterativa (d.p.d.v. proces):I eficienta, datorita spat,iului suplimentar constantI nu foarte lizibila

I Varianta pe liste:I eleganta s, i concisaI ineficienta, datorita

I spat,iului posibil mare ocupat la un moment dat— toate numerele din intervalul [a,b]

I parcurgerii repetate a intervalului(interval, filter, foldl)

I Cum îmbinam avantajele celor doua abordari?

178 / 423

Page 629: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Comparat,ie

I Varianta iterativa (d.p.d.v. proces):I eficienta, datorita spat,iului suplimentar constantI nu foarte lizibila

I Varianta pe liste:I eleganta s, i concisaI ineficienta, datorita

I spat,iului posibil mare ocupat la un moment dat— toate numerele din intervalul [a,b]

I parcurgerii repetate a intervalului(interval, filter, foldl)

I Cum îmbinam avantajele celor doua abordari?

178 / 423

Page 630: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Caracteristicile fluxurilor

I Secvent,e construite part,ial, extinse la cerere, cecreeaza iluzia completitudinii structurii

I Îmbinarea elegant,ei manipularii listelorcu eficient,a calculului incremental

I Bariera de abstractizare:

I componentele listelor evaluate la construct,ie (cons)I ale fluxurilor la select,ie (cdr)

I Construct,ia s, i utilizarea:

I separate la nivel conceptual — modularitateI întrepatrunse la nivel de proces

179 / 423

Page 631: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Caracteristicile fluxurilor

I Secvent,e construite part,ial, extinse la cerere, cecreeaza iluzia completitudinii structurii

I Îmbinarea elegant,ei manipularii listelorcu eficient,a calculului incremental

I Bariera de abstractizare:

I componentele listelor evaluate la construct,ie (cons)I ale fluxurilor la select,ie (cdr)

I Construct,ia s, i utilizarea:

I separate la nivel conceptual — modularitateI întrepatrunse la nivel de proces

179 / 423

Page 632: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Caracteristicile fluxurilor

I Secvent,e construite part,ial, extinse la cerere, cecreeaza iluzia completitudinii structurii

I Îmbinarea elegant,ei manipularii listelorcu eficient,a calculului incremental

I Bariera de abstractizare:

I componentele listelor evaluate la construct,ie (cons)I ale fluxurilor la select,ie (cdr)

I Construct,ia s, i utilizarea:

I separate la nivel conceptual — modularitateI întrepatrunse la nivel de proces

179 / 423

Page 633: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Caracteristicile fluxurilor

I Secvent,e construite part,ial, extinse la cerere, cecreeaza iluzia completitudinii structurii

I Îmbinarea elegant,ei manipularii listelorcu eficient,a calculului incremental

I Bariera de abstractizare:I componentele listelor evaluate la construct,ie (cons)

I ale fluxurilor la select,ie (cdr)

I Construct,ia s, i utilizarea:

I separate la nivel conceptual — modularitateI întrepatrunse la nivel de proces

179 / 423

Page 634: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Caracteristicile fluxurilor

I Secvent,e construite part,ial, extinse la cerere, cecreeaza iluzia completitudinii structurii

I Îmbinarea elegant,ei manipularii listelorcu eficient,a calculului incremental

I Bariera de abstractizare:I componentele listelor evaluate la construct,ie (cons)I ale fluxurilor la select,ie (cdr)

I Construct,ia s, i utilizarea:

I separate la nivel conceptual — modularitateI întrepatrunse la nivel de proces

179 / 423

Page 635: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Caracteristicile fluxurilor

I Secvent,e construite part,ial, extinse la cerere, cecreeaza iluzia completitudinii structurii

I Îmbinarea elegant,ei manipularii listelorcu eficient,a calculului incremental

I Bariera de abstractizare:I componentele listelor evaluate la construct,ie (cons)I ale fluxurilor la select,ie (cdr)

I Construct,ia s, i utilizarea:

I separate la nivel conceptual — modularitateI întrepatrunse la nivel de proces

179 / 423

Page 636: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Caracteristicile fluxurilor

I Secvent,e construite part,ial, extinse la cerere, cecreeaza iluzia completitudinii structurii

I Îmbinarea elegant,ei manipularii listelorcu eficient,a calculului incremental

I Bariera de abstractizare:I componentele listelor evaluate la construct,ie (cons)I ale fluxurilor la select,ie (cdr)

I Construct,ia s, i utilizarea:I separate la nivel conceptual — modularitate

I întrepatrunse la nivel de proces

179 / 423

Page 637: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Caracteristicile fluxurilor

I Secvent,e construite part,ial, extinse la cerere, cecreeaza iluzia completitudinii structurii

I Îmbinarea elegant,ei manipularii listelorcu eficient,a calculului incremental

I Bariera de abstractizare:I componentele listelor evaluate la construct,ie (cons)I ale fluxurilor la select,ie (cdr)

I Construct,ia s, i utilizarea:I separate la nivel conceptual — modularitateI întrepatrunse la nivel de proces

179 / 423

Page 638: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Operatori

3 (define-syntax-rule (stream-cons head tail)

4 (cons head (pack tail)))

5

6 (define stream-first car)

7

8 (define stream-rest (compose unpack cdr))

9

10 (define empty-stream '())

11

12 (define stream-empty? null?)

180 / 423

Page 639: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Barierele de abstractizare

Fluxuri,ca entitat,i autonome:

utilizare

Expresii cu evaluare întârziata,ca entitat,i autonome:

utilizare

Fluxuri, ca perechi cont,inândexpresii cu evaluare întârziata:

implementare

Expresii cu evaluare întârziata,ca închideri funct,ionale sau promisiuni:

implementare

Interfat,a: pack, unpack

Interfat,a: stream-*

181 / 423

Page 640: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul de numere 1Implementare

5 (define ones (stream-cons 1 ones))

6 ; (stream-take 5 ones) ; (1 1 1 1 1)

:

1 1 1

1

1 1 1

ones

I Linii continue: fluxuri

I Linii întrerupte: intrari scalare, utilizate o singura data

I Cifre: intrari / ies, iri182 / 423

Page 641: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul de numere 1Implementare

5 (define ones (stream-cons 1 ones))

6 ; (stream-take 5 ones) ; (1 1 1 1 1)

:

1 1

1

1

1 1

1ones

I Linii continue: fluxuri

I Linii întrerupte: intrari scalare, utilizate o singura data

I Cifre: intrari / ies, iri182 / 423

Page 642: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul de numere 1Implementare

5 (define ones (stream-cons 1 ones))

6 ; (stream-take 5 ones) ; (1 1 1 1 1)

:

1

1 1

1

1

1 1ones

I Linii continue: fluxuri

I Linii întrerupte: intrari scalare, utilizate o singura data

I Cifre: intrari / ies, iri182 / 423

Page 643: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul de numere 1Implementare

5 (define ones (stream-cons 1 ones))

6 ; (stream-take 5 ones) ; (1 1 1 1 1)

:

1 1 1

1

1 1 1ones

I Linii continue: fluxuri

I Linii întrerupte: intrari scalare, utilizate o singura data

I Cifre: intrari / ies, iri182 / 423

Page 644: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul de numere 1Utilizarea memoriei

Atât cu închideri, cât s, i cu promisiuni, extinderease realizeaza în spat,iu constant:

1

Alternativ: (define ones (pack (cons 1 ones)))

I închideri:

1 1 . . .

I promisiuni:

1

183 / 423

Page 645: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul de numere 1Utilizarea memoriei

Atât cu închideri, cât s, i cu promisiuni, extinderease realizeaza în spat,iu constant:

1

Alternativ: (define ones (pack (cons 1 ones)))

I închideri:

1 1 . . .

I promisiuni:

1

183 / 423

Page 646: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul de numere 1Utilizarea memoriei

Atât cu închideri, cât s, i cu promisiuni, extinderease realizeaza în spat,iu constant:

1

Alternativ: (define ones (pack (cons 1 ones)))

I închideri:

1 1 . . .

I promisiuni:

1

183 / 423

Page 647: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul de numere 1Utilizarea memoriei

Atât cu închideri, cât s, i cu promisiuni, extinderease realizeaza în spat,iu constant:

1

Alternativ: (define ones (pack (cons 1 ones)))

I închideri:

1 1 . . .

I promisiuni:

1

183 / 423

Page 648: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul numerelor naturaleFormulare explicita

10 (define (naturals-from n)

11 (stream-cons n (naturals-from (+ n 1))))

12

13 (define naturals (naturals-from 0))

I Închideri: multiple parcurgeri ale fluxului determinareevaluarea port,iunilor deja explorate

I Explorarea 1, cu 3 elemente: 0 1 2I Explorarea 2, cu 5 elemente: 0 1 2 3 4

I Promisiuni: multiple parcurgeri ale fluxului determinaevaluarea dincolo de port,iunile deja explorate

I Explorarea 1, cu 3 elemente: 0 1 2I Explorarea 2, cu 5 elemente: 0 1 2 3 4

184 / 423

Page 649: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul numerelor naturaleFormulare explicita

10 (define (naturals-from n)

11 (stream-cons n (naturals-from (+ n 1))))

12

13 (define naturals (naturals-from 0))

I Închideri: multiple parcurgeri ale fluxului determinareevaluarea port,iunilor deja explorate

I Explorarea 1, cu 3 elemente: 0 1 2I Explorarea 2, cu 5 elemente: 0 1 2 3 4

I Promisiuni: multiple parcurgeri ale fluxului determinaevaluarea dincolo de port,iunile deja explorate

I Explorarea 1, cu 3 elemente: 0 1 2I Explorarea 2, cu 5 elemente: 0 1 2 3 4

184 / 423

Page 650: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul numerelor naturaleFormulare explicita

10 (define (naturals-from n)

11 (stream-cons n (naturals-from (+ n 1))))

12

13 (define naturals (naturals-from 0))

I Închideri: multiple parcurgeri ale fluxului determinareevaluarea port,iunilor deja explorate

I Explorarea 1, cu 3 elemente: 0 1 2

I Explorarea 2, cu 5 elemente: 0 1 2 3 4

I Promisiuni: multiple parcurgeri ale fluxului determinaevaluarea dincolo de port,iunile deja explorate

I Explorarea 1, cu 3 elemente: 0 1 2I Explorarea 2, cu 5 elemente: 0 1 2 3 4

184 / 423

Page 651: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul numerelor naturaleFormulare explicita

10 (define (naturals-from n)

11 (stream-cons n (naturals-from (+ n 1))))

12

13 (define naturals (naturals-from 0))

I Închideri: multiple parcurgeri ale fluxului determinareevaluarea port,iunilor deja explorate

I Explorarea 1, cu 3 elemente: 0 1 2I Explorarea 2, cu 5 elemente: 0 1 2 3 4

I Promisiuni: multiple parcurgeri ale fluxului determinaevaluarea dincolo de port,iunile deja explorate

I Explorarea 1, cu 3 elemente: 0 1 2I Explorarea 2, cu 5 elemente: 0 1 2 3 4

184 / 423

Page 652: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul numerelor naturaleFormulare explicita

10 (define (naturals-from n)

11 (stream-cons n (naturals-from (+ n 1))))

12

13 (define naturals (naturals-from 0))

I Închideri: multiple parcurgeri ale fluxului determinareevaluarea port,iunilor deja explorate

I Explorarea 1, cu 3 elemente: 0 1 2I Explorarea 2, cu 5 elemente: 0 1 2 3 4

I Promisiuni: multiple parcurgeri ale fluxului determinaevaluarea dincolo de port,iunile deja explorate

I Explorarea 1, cu 3 elemente: 0 1 2I Explorarea 2, cu 5 elemente: 0 1 2 3 4

184 / 423

Page 653: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul numerelor naturaleFormulare explicita

10 (define (naturals-from n)

11 (stream-cons n (naturals-from (+ n 1))))

12

13 (define naturals (naturals-from 0))

I Închideri: multiple parcurgeri ale fluxului determinareevaluarea port,iunilor deja explorate

I Explorarea 1, cu 3 elemente: 0 1 2I Explorarea 2, cu 5 elemente: 0 1 2 3 4

I Promisiuni: multiple parcurgeri ale fluxului determinaevaluarea dincolo de port,iunile deja explorate

I Explorarea 1, cu 3 elemente: 0 1 2

I Explorarea 2, cu 5 elemente: 0 1 2 3 4

184 / 423

Page 654: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul numerelor naturaleFormulare explicita

10 (define (naturals-from n)

11 (stream-cons n (naturals-from (+ n 1))))

12

13 (define naturals (naturals-from 0))

I Închideri: multiple parcurgeri ale fluxului determinareevaluarea port,iunilor deja explorate

I Explorarea 1, cu 3 elemente: 0 1 2I Explorarea 2, cu 5 elemente: 0 1 2 3 4

I Promisiuni: multiple parcurgeri ale fluxului determinaevaluarea dincolo de port,iunile deja explorate

I Explorarea 1, cu 3 elemente: 0 1 2I Explorarea 2, cu 5 elemente: 0 1 2 3 4

184 / 423

Page 655: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul numerelor naturaleFormulare implicita

17 (define naturals

18 (stream-cons 0

19 (stream-zip-with +

20 ones

21 naturals)))

1 1 1ones

+

3 2 1 0

:

0

3 2 1 0

naturals

185 / 423

Page 656: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul numerelor naturaleFormulare implicita

17 (define naturals

18 (stream-cons 0

19 (stream-zip-with +

20 ones

21 naturals)))

1 1 1ones

+

3 2 1

0

:

0

3 2 1

0naturals

185 / 423

Page 657: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul numerelor naturaleFormulare implicita

17 (define naturals

18 (stream-cons 0

19 (stream-zip-with +

20 ones

21 naturals)))

1 1 1ones

+

3 2

1 0

:

0

3 2

1 0naturals

185 / 423

Page 658: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul numerelor naturaleFormulare implicita

17 (define naturals

18 (stream-cons 0

19 (stream-zip-with +

20 ones

21 naturals)))

1 1 1ones

+

3

2 1 0

:

0

3

2 1 0naturals

185 / 423

Page 659: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul numerelor naturaleFormulare implicita

17 (define naturals

18 (stream-cons 0

19 (stream-zip-with +

20 ones

21 naturals)))

1 1 1ones

+

3 2 1 0

:

0

3 2 1 0naturals

185 / 423

Page 660: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul numerelor pare

25 (define even-naturals-1

26 (stream-filter even? naturals))

27

28 (define even-naturals-2

29 (stream-zip-with + naturals naturals))

186 / 423

Page 661: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul sumelor part,iale ale altui flux

33 (define (sums s)

34 (letrec ([out (stream-cons

35 0

36 (stream-zip-with + s out))])

37 out))

s2 s1 s0

s+

s0,2 s0,1 s0 0

:

0

s0,2 s0,1 s0 0

sums

si ,j = si + . . .+ sj

187 / 423

Page 662: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul sumelor part,iale ale altui flux

33 (define (sums s)

34 (letrec ([out (stream-cons

35 0

36 (stream-zip-with + s out))])

37 out))

s2 s1 s0

s+

s0,2 s0,1 s0

0

:

0

s0,2 s0,1 s0

0sums

si ,j = si + . . .+ sj

187 / 423

Page 663: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul sumelor part,iale ale altui flux

33 (define (sums s)

34 (letrec ([out (stream-cons

35 0

36 (stream-zip-with + s out))])

37 out))

s2 s1 s0

s+

s0,2 s0,1

s0 0

:

0

s0,2 s0,1

s0 0sums

si ,j = si + . . .+ sj

187 / 423

Page 664: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul sumelor part,iale ale altui flux

33 (define (sums s)

34 (letrec ([out (stream-cons

35 0

36 (stream-zip-with + s out))])

37 out))

s2 s1 s0

s+

s0,2

s0,1 s0 0

:

0

s0,2

s0,1 s0 0sums

si ,j = si + . . .+ sj

187 / 423

Page 665: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul sumelor part,iale ale altui flux

33 (define (sums s)

34 (letrec ([out (stream-cons

35 0

36 (stream-zip-with + s out))])

37 out))

s2 s1 s0

s+

s0,2 s0,1 s0 0

:

0

s0,2 s0,1 s0 0sums

si ,j = si + . . .+ sj

187 / 423

Page 666: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul numerelor FibonacciFormulare implicita

43 (define fibo

44 (stream-cons 0

45 (stream-cons 1

46 (stream-zip-with +

47 fibo

48 (stream-rest fibo)))))

+

3 2 1 1

3 2 1 1 0

:

1

:

0

3 2 1 1 0

fibo

188 / 423

Page 667: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul numerelor FibonacciFormulare implicita

43 (define fibo

44 (stream-cons 0

45 (stream-cons 1

46 (stream-zip-with +

47 fibo

48 (stream-rest fibo)))))

+

3 2 1 1

3 2 1 1

0

:

1

:

0

3 2 1 1

0fibo

188 / 423

Page 668: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul numerelor FibonacciFormulare implicita

43 (define fibo

44 (stream-cons 0

45 (stream-cons 1

46 (stream-zip-with +

47 fibo

48 (stream-rest fibo)))))

+

3 2 1

1

3 2 1

1 0

:

1

:

0

3 2 1

1 0fibo

188 / 423

Page 669: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul numerelor FibonacciFormulare implicita

43 (define fibo

44 (stream-cons 0

45 (stream-cons 1

46 (stream-zip-with +

47 fibo

48 (stream-rest fibo)))))

+

3 2

1 1

3 2

1 1 0

:

1

:

0

3 2

1 1 0fibo

188 / 423

Page 670: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul numerelor FibonacciFormulare implicita

43 (define fibo

44 (stream-cons 0

45 (stream-cons 1

46 (stream-zip-with +

47 fibo

48 (stream-rest fibo)))))

+

3

2 1 1

3

2 1 1 0

:

1

:

0

3

2 1 1 0fibo

188 / 423

Page 671: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul numerelor FibonacciFormulare implicita

43 (define fibo

44 (stream-cons 0

45 (stream-cons 1

46 (stream-zip-with +

47 fibo

48 (stream-rest fibo)))))

+

3 2 1 1

3 2 1 1 0

:

1

:

0

3 2 1 1 0fibo

188 / 423

Page 672: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul numerelor prime I

I Ciurul lui Eratostene

I Pornim de la fluxul numerelor naturale, începând cu 2

I Elementul curent din fluxul init,ial apart,ine fluxuluinumerelor prime

I Restul fluxului se obt,ineI eliminând multiplii elementului curent din fluxul init,ialI continuând procesul de filtrare, cu elementul urmator

189 / 423

Page 673: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Fluxul numerelor prime II

52 (define (sieve s)

53 (if (stream-empty? s) s

54 (stream-cons

55 (stream-first s)

56 (sieve

57 (stream-filter

58 (lambda (n)

59 (not (zero? (remainder

60 n

61 (stream-first s)))))

62 (stream-rest s))))))

63

64 (define primes (sieve (naturals-from 2)))

190 / 423

Page 674: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Grafuri ciclice I

afirst b first

second

second

Fiecare nod cont,ine:

I cheia: keyI legaturile catre doua noduri: first, second

191 / 423

Page 675: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Grafuri ciclice II

3 (define-syntax-rule (node key fst snd)

4 (pack (list key fst snd)))

5

6 (define key car)

7 (define fst (compose unpack cadr))

8 (define snd (compose unpack caddr))

9

10 (define graph

11 (letrec ([a (node 'a a b)]

12 [b (node 'b b a)])

13 (unpack a)))

14

15 (eq? graph (fst graph)) ; similar cu == din Java

16 ; #f pentru inchideri, #t pentru promisiuni

192 / 423

Page 676: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Grafuri ciclice IIII Explorarea grafului în cazul închiderilor:

nodurile sunt regenerate la fiecare vizitare

a

a

a

. . .

. . .

b

. . .

. . .

b

b

. . .

. . .

a

. . .

. . .

193 / 423

Page 677: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Mecanisme

Abstractizare de date

Fluxuri

Rezolvarea problemelor prin cautare lenes, aîn spat,iul starilor

194 / 423

Page 678: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Spat,iul starilor unei probleme

Mult,imea configurat,iilor valide din universul problemei

195 / 423

Page 679: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Problema palindroamelorDefinit,ie

I Paln: Sa se determine palindroamele de lungimecel put,in n, care se pot forma cu elementele unuialfabet fixat.

I Starile problemei: toate s, irurile generabilecu elementele alfabetului respectiv

196 / 423

Page 680: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Problema palindroamelorDefinit,ie

I Paln: Sa se determine palindroamele de lungimecel put,in n, care se pot forma cu elementele unuialfabet fixat.

I Starile problemei: toate s, irurile generabilecu elementele alfabetului respectiv

196 / 423

Page 681: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Problema palindroamelorSpat,iul starilor lui Pal2

/0

b

bbbbb

abba:

b:

abbab

aaba:

b:a:

b:

a

babba

abaa:

b:

aabaa

aaaa:

b:a:

b:a:

b:

197 / 423

Page 682: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Problema palindroamelorSpecificare Paln

I Starea init,iala: s, irul vid

I Operatorii de generare a starilor succesoare alteia:inserarea unui caracter la începutul unui s, ir dat

I Operatorul de verificare a proprietatat,ii de solut,iepentru o stare: palindrom, de lungime cel put,in n

198 / 423

Page 683: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Problema palindroamelorSpecificare Paln

I Starea init,iala: s, irul vid

I Operatorii de generare a starilor succesoare alteia:inserarea unui caracter la începutul unui s, ir dat

I Operatorul de verificare a proprietatat,ii de solut,iepentru o stare: palindrom, de lungime cel put,in n

198 / 423

Page 684: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Problema palindroamelorSpecificare Paln

I Starea init,iala: s, irul vid

I Operatorii de generare a starilor succesoare alteia:inserarea unui caracter la începutul unui s, ir dat

I Operatorul de verificare a proprietatat,ii de solut,iepentru o stare: palindrom, de lungime cel put,in n

198 / 423

Page 685: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cautare în spat,iul starilor

I Spat,iul starilor ca graf:

I noduri: stariI muchii (orientate): transformari ale starilor în stari

succesor

I Posibile strategii de cautare:

I lat,ime: completa s, i optimalaI adâncime: incompleta s, i suboptimala

199 / 423

Page 686: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cautare în spat,iul starilor

I Spat,iul starilor ca graf:I noduri: stari

I muchii (orientate): transformari ale starilor în starisuccesor

I Posibile strategii de cautare:

I lat,ime: completa s, i optimalaI adâncime: incompleta s, i suboptimala

199 / 423

Page 687: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cautare în spat,iul starilor

I Spat,iul starilor ca graf:I noduri: stariI muchii (orientate): transformari ale starilor în stari

succesor

I Posibile strategii de cautare:

I lat,ime: completa s, i optimalaI adâncime: incompleta s, i suboptimala

199 / 423

Page 688: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cautare în spat,iul starilor

I Spat,iul starilor ca graf:I noduri: stariI muchii (orientate): transformari ale starilor în stari

succesor

I Posibile strategii de cautare:

I lat,ime: completa s, i optimalaI adâncime: incompleta s, i suboptimala

199 / 423

Page 689: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cautare în spat,iul starilor

I Spat,iul starilor ca graf:I noduri: stariI muchii (orientate): transformari ale starilor în stari

succesor

I Posibile strategii de cautare:I lat,ime: completa s, i optimala

I adâncime: incompleta s, i suboptimala

199 / 423

Page 690: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cautare în spat,iul starilor

I Spat,iul starilor ca graf:I noduri: stariI muchii (orientate): transformari ale starilor în stari

succesor

I Posibile strategii de cautare:I lat,ime: completa s, i optimalaI adâncime: incompleta s, i suboptimala

199 / 423

Page 691: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cautare în lat,ime

1 (define (breadth-search-goal init expand goal?)

2 (let search ([states (list init)])

3 (if (null? states) '()

4 (let ([state (car states)]

5 [states (cdr states)])

6 (if (goal? state) state

7 (search (append states

8 (expand

9 state))))))))

I Generarea unei singure solut,ii

I Cum le obt,inem pe celelalte, mai ales daca spat,iuleste infinit?

200 / 423

Page 692: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cautare în lat,ime

1 (define (breadth-search-goal init expand goal?)

2 (let search ([states (list init)])

3 (if (null? states) '()

4 (let ([state (car states)]

5 [states (cdr states)])

6 (if (goal? state) state

7 (search (append states

8 (expand

9 state))))))))

I Generarea unei singure solut,ii

I Cum le obt,inem pe celelalte, mai ales daca spat,iuleste infinit?

200 / 423

Page 693: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cautare în lat,ime

1 (define (breadth-search-goal init expand goal?)

2 (let search ([states (list init)])

3 (if (null? states) '()

4 (let ([state (car states)]

5 [states (cdr states)])

6 (if (goal? state) state

7 (search (append states

8 (expand

9 state))))))))

I Generarea unei singure solut,ii

I Cum le obt,inem pe celelalte, mai ales daca spat,iuleste infinit?

200 / 423

Page 694: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cautare lenes, a în lat,ime IFluxul starilor solut,ie

3 (define (lazy-breadth-search init expand)

4 (let search

5 ([states (stream-cons init empty-stream)])

6 (if (stream-empty? states) states

7 (let ([state (stream-first states)]

8 [states (stream-rest states)])

9 (stream-cons

10 state

11 (search (stream-append

12 states

13 (expand state))))))))

14

15 (define (lazy-breadth-search-goal

16 init expand goal?)

17 (stream-filter goal?

201 / 423

Page 695: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cautare lenes, a în lat,ime IIFluxul starilor solut,ie

18 (lazy-breadth-search init

19 expand)))

I La nivel înalt, conceptual: separare între explorareaspat,iului s, i identificarea starilor solut,ie

I La nivelul scazut, al instruct,iunilor: întrepatrundereacelor doua aspecte

202 / 423

Page 696: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Aplicat,ii

I Palindroame

I Problema reginelor

203 / 423

Page 697: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Problema reginelorDefinit,ie

I Queensn: Sa se determine toate modurilede amplasare a n regine pe o tabla de s, ahde dimensiune n, astfel încât oricare douasa nu se atace.

I Starile problemei: configurat,iile, eventual part,iale,ale tablei

204 / 423

Page 698: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Problema reginelorDefinit,ie

I Queensn: Sa se determine toate modurilede amplasare a n regine pe o tabla de s, ahde dimensiune n, astfel încât oricare douasa nu se atace.

I Starile problemei: configurat,iile, eventual part,iale,ale tablei

204 / 423

Page 699: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Problema reginelorSpat,iul starilor lui Queens4

/0

• . . .

• ••

••

••

••

• ••

••

••

••

• . . .

205 / 423

Page 700: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Rezumat

Evaluarea lenes, a permite un stil de programarede nivel înalt, prin separarea aparenta a diverselor

aspecte — de exemplu, construct,ia s, i accesarea listelor.

206 / 423

Page 701: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Bibliografie

Abelson, H. and Sussman, G. J. (1996). Structure andInterpretation of Computer Programs. MIT Press,Cambridge, MA, USA, 2nd edition.

207 / 423

Page 702: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Partea VII

Limbajul Haskell

208 / 423

Page 703: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Introducere

Evaluare

Tipare

Sinteza de tip

209 / 423

Page 704: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Introducere

Evaluare

Tipare

Sinteza de tip

210 / 423

Page 705: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Paralela între limbaje

Criteriu Scheme HaskellFunct,ii Curried / uncurried CurriedEvaluare Aplicativa Lenes, aTipare Dinamica, tare Statica, tareLegareavariabilelor

Locale → statica,top-level → dinamica

Statica

211 / 423

Page 706: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ii

I Curried

I Aplicabile asupra oricâtor parametri la un moment dat

1 add1 x y = x + y

2 add2 = \x y -> x + y

3 add3 = \x -> \y -> x + y

4

5 result = add1 1 2 -- sau ((add1 1) 2)

6 inc = add1 1 -- functie

212 / 423

Page 707: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ii s, i operatori

I Aplicabilitatea part,iala a operatorilor infixat,i (sect,iuni)

I Transformari operator→funct,ie s, i funct,ie→operator

1 add4 = (+)

2

3 result1 = (+) 1 2 -- operator ca functie

4 result2 = 1 ‘add4‘ 2 -- functie ca operator

5

6 inc1 = (1 +) -- sectiuni

7 inc2 = (+ 1)

8 inc3 = (1 ‘add4‘)

9 inc4 = (‘add4‘ 1)

213 / 423

Page 708: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Pattern matching

Definirea comportamentului funct,iilor pornind de lastructura parametrilor — traducerea axiomelor TDA

1 add5 0 y = y -- add5 1 2

2 add5 (x + 1) y = 1 + add5 x y

3

4 listSum [] = 0 -- sumList [1, 2, 3]

5 listSum (hd : tl) = hd + listSum tl

6

7 pairSum (x, y) = x + y -- sumPair (1, 2)

8

9 wackySum (x, y, z@(hd : _)) = -- wackySum

10 x + y + hd + listSum z -- (1, 2, [3, 4, 5])

214 / 423

Page 709: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

List comprehensions

Definirea listelor prin proprietat,ile elementelor, similarunei specificat,ii matematice

1 squares lst = [ x * x | x <- lst ]

2

3 qSort [] = []

4 qSort (h : t) = qSort [ x | x <- t, x <= h ]

5 ++ [h]

6 ++ qSort [ x | x <- t, x > h ]

7

8 interval = [ 0 .. 10 ]

9 evenInterval = [ 0, 2 .. 10 ]

10 naturals = [ 0 .. ]

215 / 423

Page 710: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Introducere

Evaluare

Tipare

Sinteza de tip

216 / 423

Page 711: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluare

I Evaluare lenes, a: parametri evaluat,i la cerere, cel multo data, eventual part,ial, în cazul obiectelor structurate

I Funct,ii nestricte!

1 f (x, y) z = x + x

2

3 f (2 + 3, 3 + 5) (5 + 8)

4 → (2 + 3) + (2 + 3)

5 → 5 + 5 -- reutilizam rezultatul primei evauari

6 → 10

217 / 423

Page 712: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluare

I Evaluare lenes, a: parametri evaluat,i la cerere, cel multo data, eventual part,ial, în cazul obiectelor structurate

I Funct,ii nestricte!

1 f (x, y) z = x + x

2

3 f (2 + 3, 3 + 5) (5 + 8)

4 → (2 + 3) + (2 + 3)

5 → 5 + 5 -- reutilizam rezultatul primei evauari

6 → 10

217 / 423

Page 713: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluare

I Evaluare lenes, a: parametri evaluat,i la cerere, cel multo data, eventual part,ial, în cazul obiectelor structurate

I Funct,ii nestricte!

1 f (x, y) z = x + x

2

3 f (2 + 3, 3 + 5) (5 + 8)

4 → (2 + 3) + (2 + 3)

5 → 5 + 5 -- reutilizam rezultatul primei evauari

6 → 10

217 / 423

Page 714: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluare

I Evaluare lenes, a: parametri evaluat,i la cerere, cel multo data, eventual part,ial, în cazul obiectelor structurate

I Funct,ii nestricte!

1 f (x, y) z = x + x

2

3 f (2 + 3, 3 + 5) (5 + 8)

4 → (2 + 3) + (2 + 3)

5 → 5 + 5 -- reutilizam rezultatul primei evauari

6 → 10

217 / 423

Page 715: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluare

I Evaluare lenes, a: parametri evaluat,i la cerere, cel multo data, eventual part,ial, în cazul obiectelor structurate

I Funct,ii nestricte!

1 f (x, y) z = x + x

2

3 f (2 + 3, 3 + 5) (5 + 8)

4 → (2 + 3) + (2 + 3)

5 → 5 + 5 -- reutilizam rezultatul primei evauari

6 → 10

217 / 423

Page 716: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluare

I Evaluare lenes, a: parametri evaluat,i la cerere, cel multo data, eventual part,ial, în cazul obiectelor structurate

I Funct,ii nestricte!

1 f (x, y) z = x + x

2

3 f (2 + 3, 3 + 5) (5 + 8)

4 → (2 + 3) + (2 + 3)

5 → 5 + 5 -- reutilizam rezultatul primei evauari

6 → 10

217 / 423

Page 717: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluare

I Evaluare lenes, a: parametri evaluat,i la cerere, cel multo data, eventual part,ial, în cazul obiectelor structurate

I Funct,ii nestricte!

1 f (x, y) z = x + x

2

3 f (2 + 3, 3 + 5) (5 + 8)

4 → (2 + 3) + (2 + 3)

5 → 5 + 5 -- reutilizam rezultatul primei evauari

6 → 10

217 / 423

Page 718: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluare

I Evaluare lenes, a: parametri evaluat,i la cerere, cel multo data, eventual part,ial, în cazul obiectelor structurate

I Funct,ii nestricte!

1 f (x, y) z = x + x

2

3 f (2 + 3, 3 + 5) (5 + 8)

4 → (2 + 3) + (2 + 3)

5 → 5 + 5 -- reutilizam rezultatul primei evauari

6 → 10

217 / 423

Page 719: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluare

I Evaluare lenes, a: parametri evaluat,i la cerere, cel multo data, eventual part,ial, în cazul obiectelor structurate

I Funct,ii nestricte!

1 f (x, y) z = x + x

2

3 f (2 + 3, 3 + 5) (5 + 8)

4 → (2 + 3) + (2 + 3)

5 → 5 + 5 -- reutilizam rezultatul primei evauari

6 → 10

217 / 423

Page 720: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Pas, i în aplicarea funct,iilor I

1 front (x : y : zs) = x + y

2 front [x] = x

3

4 notNil [] = False5 notNil (_ : _) = True6

7 f m n

8 | notNil xs = front xs

9 | otherwise = n

10 where11 xs = [m .. n]

Exemplu preluat din Thompson (1999)

218 / 423

Page 721: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Pas, i în aplicarea funct,iilor II

1. Pattern matching: evaluarea parametrilor suficientcât sa se constate (ne-)potrivirea cu pattern-ul

2. Evaluarea garzilor (|)

3. Evaluarea variabilelor locale, la cerere (where, let)

219 / 423

Page 722: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Pas, i în aplicarea funct,iilor III

1 f 3 5

2 ?? notNil xs

3 ?? where4 ?? xs = [3 .. 5]

5 ?? → 3 : [4 .. 5]

6 ?? → notNil (3 : [4 .. 5])

7 ?? → True8 → front xs

9 where10 xs = 3 : [4 .. 5]

11 → 3 : 4 : [5]

12 → front (3 : 4 : [5])

13 → 3 + 4

14 → 7

220 / 423

Page 723: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Consecint,e

I Evaluarea part,iala a obiectelor structurate (liste etc.)

I Liste, implicit, ca fluxuri!

1 ones = 1 : ones

2

3 naturalsFrom n = n : (naturalsFrom (n + 1))

4 naturals1 = naturalsFrom 0

5 naturals2 = 0 : (zipWith (+) ones naturals2)

6

7 evenNaturals1 = filter even naturals1

8 evenNaturals2 = zipWith (+) naturals1 naturals2

9

10 fibo = 0 : 1 :

11 (zipWith (+) fibo (tail fibo))

221 / 423

Page 724: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Introducere

Evaluare

Tipare

Sinteza de tip

222 / 423

Page 725: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

TipuriI Tipuri ca mult,imi de valori:

I Bool = {True, False}

I Natural = {0, 1, 2, ...}

I Char = {’a’, ’b’, ’c’, ...}

I Tipare statica:I etapa de tipare anterioara etapei de evaluareI asocierea fiecarei expresii din program cu un tip

I Tipare tare: absent,a conversiilor implicite de tip

I Expresii de:I program: 5, 2 + 3, x && (not y)

I tip: Integer, [Char], Char -> Bool, a

223 / 423

Page 726: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

TipuriI Tipuri ca mult,imi de valori:

I Bool = {True, False}

I Natural = {0, 1, 2, ...}

I Char = {’a’, ’b’, ’c’, ...}

I Tipare statica:I etapa de tipare anterioara etapei de evaluareI asocierea fiecarei expresii din program cu un tip

I Tipare tare: absent,a conversiilor implicite de tip

I Expresii de:I program: 5, 2 + 3, x && (not y)

I tip: Integer, [Char], Char -> Bool, a

223 / 423

Page 727: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

TipuriI Tipuri ca mult,imi de valori:

I Bool = {True, False}

I Natural = {0, 1, 2, ...}

I Char = {’a’, ’b’, ’c’, ...}

I Tipare statica:I etapa de tipare anterioara etapei de evaluareI asocierea fiecarei expresii din program cu un tip

I Tipare tare: absent,a conversiilor implicite de tip

I Expresii de:I program: 5, 2 + 3, x && (not y)

I tip: Integer, [Char], Char -> Bool, a

223 / 423

Page 728: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

TipuriI Tipuri ca mult,imi de valori:

I Bool = {True, False}

I Natural = {0, 1, 2, ...}

I Char = {’a’, ’b’, ’c’, ...}

I Tipare statica:I etapa de tipare anterioara etapei de evaluareI asocierea fiecarei expresii din program cu un tip

I Tipare tare: absent,a conversiilor implicite de tip

I Expresii de:I program: 5, 2 + 3, x && (not y)

I tip: Integer, [Char], Char -> Bool, a

223 / 423

Page 729: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemple de tipuri

1 5 :: Integer2 ’a’ :: Char3 inc :: Integer -> Integer4 [1,2,3] :: [Integer]5 (True, "Hello") :: (Bool, [Char])

224 / 423

Page 730: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Tipuri de baza

I Tipurile ale caror valori nu pot fi descompuse

I Exemple:I Bool

I Char

I Integer

I Int

I Float

225 / 423

Page 731: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Constructori de tip

“Funct,ii” de tip, care genereaza tipuri noi pe bazacelor existente

1 -- Constructorul de tip functie: ->

2 (-> Bool Bool) ⇒ Bool -> Bool3 (-> Bool (Bool -> Bool)) ⇒ Bool -> (Bool -> Bool)4

5 -- Constructorul de tip lista: []

6 ([] Bool) ⇒ [Bool]7 ([] [Bool]) ⇒ [[Bool]]8

9 -- Constructorul de tip tuplu: (,...,)

10 ((,) Bool Char) ⇒ (Bool, Char)11 ((,,) Bool ((,) Char [Bool]) Bool)12 ⇒ (Bool, (Char, [Bool]), Bool)

226 / 423

Page 732: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Tipurile funct,iilor

Constructorul “->” asociativ la dreapta:Integer -> Integer -> Integer

≡ Integer -> (Integer -> Integer)

1 add6 :: Integer -> Integer -> Integer2 add6 x y = x + y

3

4 f :: (Integer -> Integer) -> Integer5 f g = (g 3) + 1

6

7 idd :: a -> a -- functie polimorfica

8 idd x = x -- a: variabila de tip!

227 / 423

Page 733: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Polimorfism

I Parametric: manifestarea aceluias, i comportamentpentru parametri de tipuri diferite. Exemplu: idd

I Ad-hoc: manifestarea unor comportamente diferitepentru parametri de tipuri diferite. Exemplu: (==)

228 / 423

Page 734: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Constructorul de tip Natural IDefinit de utilizator

1 data Natural

2 = Zero

3 | Succ Natural

4 deriving (Show, Eq)5

6 unu = Succ Zero

7 doi = Succ unu

8

9 addNat Zero n = n

10 addNat (Succ m) n = Succ (addNat m n)

229 / 423

Page 735: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Constructorul de tip Natural IIDefinit de utilizator

I Constructor de tip: NaturalI nularI se confunda cu tipul pe care-l construies, te

I Constructori de date:I Zero: nularI Succ: unar

I Constructorii de date ca funct,ii, utilizabileîn pattern matching1 Zero :: Natural

2 Succ :: Natural -> Natural

230 / 423

Page 736: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Constructorul de tip Pair IDefinit de utilizator

1 data Pair a b

2 = P a b

3 deriving (Show, Eq)4

5 pair1 = P 2 True6 pair2 = P 1 pair1

7

8 myFst (P x y) = x

9 mySnd (P x y) = y

231 / 423

Page 737: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Constructorul de tip Pair IIDefinit de utilizator

I Constructor de tip: PairI polimorfic, binar

I genereaza un tip în momentul aplicarii asupra 2 tipuri

I Constructor de date: P, binar

1 P :: a -> b -> Pair a b

232 / 423

Page 738: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Uniformitatea reprezentarii tipurilor

1 data Integer = ... | -2 | -1 | 0 | 1 | 2 | ...

2

3 data Char = ’a’ | ’b’ | ’c’ | ...

4

5 data [a] = [] | a : [a]

6

7 data (a, b) = (a, b)

233 / 423

Page 739: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Introducere

Evaluare

Tipare

Sinteza de tip

234 / 423

Page 740: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Sinteza de tipI Definit,ie: determinarea automata a tipului

unei expresii, pe baza unor reguli precise

I Adnotarile explicite de tip, des, i posibile, nenecesareîn majoritatea cazurilor

I Dependenta de:

I componentele expresieiI contextul lexical al expresiei

I Reprezentarea tipurilor prin expresii de tip:

I constante de tip: tipuri de baza (Int)I variabile de tip: pot fi legate la orice expresii de tip (a)I aplicat,ii ale constructorilor de tip asupra expresiilor

de tip ([a])

235 / 423

Page 741: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Sinteza de tipI Definit,ie: determinarea automata a tipului

unei expresii, pe baza unor reguli precise

I Adnotarile explicite de tip, des, i posibile, nenecesareîn majoritatea cazurilor

I Dependenta de:

I componentele expresieiI contextul lexical al expresiei

I Reprezentarea tipurilor prin expresii de tip:

I constante de tip: tipuri de baza (Int)I variabile de tip: pot fi legate la orice expresii de tip (a)I aplicat,ii ale constructorilor de tip asupra expresiilor

de tip ([a])

235 / 423

Page 742: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Sinteza de tipI Definit,ie: determinarea automata a tipului

unei expresii, pe baza unor reguli precise

I Adnotarile explicite de tip, des, i posibile, nenecesareîn majoritatea cazurilor

I Dependenta de:

I componentele expresieiI contextul lexical al expresiei

I Reprezentarea tipurilor prin expresii de tip:

I constante de tip: tipuri de baza (Int)I variabile de tip: pot fi legate la orice expresii de tip (a)I aplicat,ii ale constructorilor de tip asupra expresiilor

de tip ([a])

235 / 423

Page 743: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Sinteza de tipI Definit,ie: determinarea automata a tipului

unei expresii, pe baza unor reguli precise

I Adnotarile explicite de tip, des, i posibile, nenecesareîn majoritatea cazurilor

I Dependenta de:I componentele expresiei

I contextul lexical al expresiei

I Reprezentarea tipurilor prin expresii de tip:

I constante de tip: tipuri de baza (Int)I variabile de tip: pot fi legate la orice expresii de tip (a)I aplicat,ii ale constructorilor de tip asupra expresiilor

de tip ([a])

235 / 423

Page 744: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Sinteza de tipI Definit,ie: determinarea automata a tipului

unei expresii, pe baza unor reguli precise

I Adnotarile explicite de tip, des, i posibile, nenecesareîn majoritatea cazurilor

I Dependenta de:I componentele expresieiI contextul lexical al expresiei

I Reprezentarea tipurilor prin expresii de tip:

I constante de tip: tipuri de baza (Int)I variabile de tip: pot fi legate la orice expresii de tip (a)I aplicat,ii ale constructorilor de tip asupra expresiilor

de tip ([a])

235 / 423

Page 745: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Sinteza de tipI Definit,ie: determinarea automata a tipului

unei expresii, pe baza unor reguli precise

I Adnotarile explicite de tip, des, i posibile, nenecesareîn majoritatea cazurilor

I Dependenta de:I componentele expresieiI contextul lexical al expresiei

I Reprezentarea tipurilor prin expresii de tip:

I constante de tip: tipuri de baza (Int)I variabile de tip: pot fi legate la orice expresii de tip (a)I aplicat,ii ale constructorilor de tip asupra expresiilor

de tip ([a])

235 / 423

Page 746: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Sinteza de tipI Definit,ie: determinarea automata a tipului

unei expresii, pe baza unor reguli precise

I Adnotarile explicite de tip, des, i posibile, nenecesareîn majoritatea cazurilor

I Dependenta de:I componentele expresieiI contextul lexical al expresiei

I Reprezentarea tipurilor prin expresii de tip:I constante de tip: tipuri de baza (Int)

I variabile de tip: pot fi legate la orice expresii de tip (a)I aplicat,ii ale constructorilor de tip asupra expresiilor

de tip ([a])

235 / 423

Page 747: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Sinteza de tipI Definit,ie: determinarea automata a tipului

unei expresii, pe baza unor reguli precise

I Adnotarile explicite de tip, des, i posibile, nenecesareîn majoritatea cazurilor

I Dependenta de:I componentele expresieiI contextul lexical al expresiei

I Reprezentarea tipurilor prin expresii de tip:I constante de tip: tipuri de baza (Int)I variabile de tip: pot fi legate la orice expresii de tip (a)

I aplicat,ii ale constructorilor de tip asupra expresiilorde tip ([a])

235 / 423

Page 748: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Sinteza de tipI Definit,ie: determinarea automata a tipului

unei expresii, pe baza unor reguli precise

I Adnotarile explicite de tip, des, i posibile, nenecesareîn majoritatea cazurilor

I Dependenta de:I componentele expresieiI contextul lexical al expresiei

I Reprezentarea tipurilor prin expresii de tip:I constante de tip: tipuri de baza (Int)I variabile de tip: pot fi legate la orice expresii de tip (a)I aplicat,ii ale constructorilor de tip asupra expresiilor

de tip ([a])

235 / 423

Page 749: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Reguli simplificate de sinteza de tip I

I Forma generala:

premisa-1 ... premisa-m

concluzie-1 ... concluzie-n(nume)

I Funct,ie:

Var :: a Expr :: b

\Var -> Expr :: a -> b(TLambda)

I Aplicat,ie:

Expr1 :: a -> b Expr2 :: a

(Expr1 Expr2) :: b(TApp)

236 / 423

Page 750: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Reguli simplificate de sinteza de tip II

I Operatorul +:

Expr1 :: Int Expr2 :: Int

Expr1 + Expr2 :: Int(T+)

I Literali întregi:

0, 1, 2, ... :: Int(TInt)

237 / 423

Page 751: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemple de sinteza de tip I

f g = (g 3) + 1

g :: a (g 3) + 1 :: b

f :: a -> b(TLambda)

(g 3) :: Int 1 :: Int

(g 3) + 1 :: Int(T+, TInt)

b = Int

g :: c -> d 3 :: c

(g 3) :: d(TApp)

a = c -> d, c = Int, d = Int

f :: (Int -> Int) -> Int

238 / 423

Page 752: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemple de sinteza de tip II

fix f = f (fix f)

f :: a f (fix f) :: b

fix :: a -> b(TLambda)

f :: c -> d (fix f) :: c

f (fix f) :: d(TApp)

a = c -> d, b = d

fix :: e -> g f :: e

(fix f) :: g(TApp)

a -> b = e -> g, a = e, b = g, c = g

f :: (c -> d) -> b = (g -> g) -> g

239 / 423

Page 753: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemple de sinteza de tip III

f x = (x x)

x :: a (x x) :: b

f :: a -> b(TLambda)

x :: c -> d x :: c

(x x) :: d(TApp)

Ecuat,ia c -> d = c nu are solut,ie,deci funct,ia nu poate fi tipata.

240 / 423

Page 754: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Unificare I

I Sinteza de tip presupune legarea variabilelor de tipîn scopul unificarii diverselor expresii de tip obt,inute

I Unificare = procesul de identificare a valorilorvariabilelor din 2 sau mai multe expresii, astfel încâtsubstituirea variabilelor prin valorile asociatesa conduca la coincident,a expresiilor

I Substitut,ie = mult,ime de legari variabila-valoare

241 / 423

Page 755: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Unificare II

Exemplu:I Expresii:

I t1 = (a, [b])I t2 = (Int, c)

I Substitut,ii:I S1 = {a ← Int, b ← Int, c ← [Int]}I S2 = {a ← Int, c ← [b]}

I Forme comune:I t1/S1 = t2/S1 = (Int, [Int])I t1/S2 = t2/S2 = (Int, [b])

Most general unifier (MGU) = cea mai generalasubstitut,ie sub care expresiile unifica. Exemplu: S2.

242 / 423

Page 756: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Unificare III

I O variabila de tip, a, unifica cu o expresie de tip, E,doar daca:

I E = a sauI E 6= a s, i E nu cont,ine a (occurrence check).

I 2 constante de tip unifica doar daca sunt egale.

I 2 aplicat,ii de tip unifica doar daca implica acelas, iconstructor de tip s, i argumente ce unifica recursiv.

243 / 423

Page 757: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Tip principal

Exemplu:

I Funct,ie: \x -> x

I Tipuri corecte:I Int -> Int

I Bool -> Bool

I a -> a

I Unele tipuri se obt,in prin instant,ierea altora.

Tip principal al unei expresii = cel mai general tipcare descrie complet natura expresiei. Se obt,ine prinutilizarea MGU.

244 / 423

Page 758: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Rezumat

I Evaluare lenes, a

I Tipare statica s, i tare, anterioara evaluarii

245 / 423

Page 759: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Bibliografie

Thompson, S. (1999). Haskell: The Craft of FunctionalProgramming. Edit,ia a doua. Addison-Wesley.

246 / 423

Page 760: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Partea VIII

Evaluare lenes, a în Haskell

247 / 423

Page 761: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

248 / 423

Page 762: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Suma patratelor

Suma patratelor numerelor naturale pâna la n,ca suma a elementelor unei liste:

1 sum (map (^2) [1 .. n])

2 → sum (map (^2) 1 : [2 .. n])

3 → sum (1^2 : (map (^2) [2 .. n]))

4 → 1^2 + sum (map (^2) [2 .. n])

5 → 1 + sum (map (^2) [2 .. n])

6 ...

7 → 1 + (4 + sum (map (^2) [3 .. n]))

8 ...

9 → 1 + (4 + (9 + ... + n^2))

Nicio lista nu este efectiv construita în timpul evaluarii.

249 / 423

Page 763: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Suma patratelor

Suma patratelor numerelor naturale pâna la n,ca suma a elementelor unei liste:

1 sum (map (^2) [1 .. n])

2 → sum (map (^2) 1 : [2 .. n])

3 → sum (1^2 : (map (^2) [2 .. n]))

4 → 1^2 + sum (map (^2) [2 .. n])

5 → 1 + sum (map (^2) [2 .. n])

6 ...

7 → 1 + (4 + sum (map (^2) [3 .. n]))

8 ...

9 → 1 + (4 + (9 + ... + n^2))

Nicio lista nu este efectiv construita în timpul evaluarii.

249 / 423

Page 764: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Suma patratelor

Suma patratelor numerelor naturale pâna la n,ca suma a elementelor unei liste:

1 sum (map (^2) [1 .. n])

2 → sum (map (^2) 1 : [2 .. n])

3 → sum (1^2 : (map (^2) [2 .. n]))

4 → 1^2 + sum (map (^2) [2 .. n])

5 → 1 + sum (map (^2) [2 .. n])

6 ...

7 → 1 + (4 + sum (map (^2) [3 .. n]))

8 ...

9 → 1 + (4 + (9 + ... + n^2))

Nicio lista nu este efectiv construita în timpul evaluarii.

249 / 423

Page 765: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Suma patratelor

Suma patratelor numerelor naturale pâna la n,ca suma a elementelor unei liste:

1 sum (map (^2) [1 .. n])

2 → sum (map (^2) 1 : [2 .. n])

3 → sum (1^2 : (map (^2) [2 .. n]))

4 → 1^2 + sum (map (^2) [2 .. n])

5 → 1 + sum (map (^2) [2 .. n])

6 ...

7 → 1 + (4 + sum (map (^2) [3 .. n]))

8 ...

9 → 1 + (4 + (9 + ... + n^2))

Nicio lista nu este efectiv construita în timpul evaluarii.

249 / 423

Page 766: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Suma patratelor

Suma patratelor numerelor naturale pâna la n,ca suma a elementelor unei liste:

1 sum (map (^2) [1 .. n])

2 → sum (map (^2) 1 : [2 .. n])

3 → sum (1^2 : (map (^2) [2 .. n]))

4 → 1^2 + sum (map (^2) [2 .. n])

5 → 1 + sum (map (^2) [2 .. n])

6 ...

7 → 1 + (4 + sum (map (^2) [3 .. n]))

8 ...

9 → 1 + (4 + (9 + ... + n^2))

Nicio lista nu este efectiv construita în timpul evaluarii.

249 / 423

Page 767: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Suma patratelor

Suma patratelor numerelor naturale pâna la n,ca suma a elementelor unei liste:

1 sum (map (^2) [1 .. n])

2 → sum (map (^2) 1 : [2 .. n])

3 → sum (1^2 : (map (^2) [2 .. n]))

4 → 1^2 + sum (map (^2) [2 .. n])

5 → 1 + sum (map (^2) [2 .. n])

6 ...

7 → 1 + (4 + sum (map (^2) [3 .. n]))

8 ...

9 → 1 + (4 + (9 + ... + n^2))

Nicio lista nu este efectiv construita în timpul evaluarii.

249 / 423

Page 768: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Suma patratelor

Suma patratelor numerelor naturale pâna la n,ca suma a elementelor unei liste:

1 sum (map (^2) [1 .. n])

2 → sum (map (^2) 1 : [2 .. n])

3 → sum (1^2 : (map (^2) [2 .. n]))

4 → 1^2 + sum (map (^2) [2 .. n])

5 → 1 + sum (map (^2) [2 .. n])

6 ...

7 → 1 + (4 + sum (map (^2) [3 .. n]))

8 ...

9 → 1 + (4 + (9 + ... + n^2))

Nicio lista nu este efectiv construita în timpul evaluarii.

249 / 423

Page 769: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Suma patratelor

Suma patratelor numerelor naturale pâna la n,ca suma a elementelor unei liste:

1 sum (map (^2) [1 .. n])

2 → sum (map (^2) 1 : [2 .. n])

3 → sum (1^2 : (map (^2) [2 .. n]))

4 → 1^2 + sum (map (^2) [2 .. n])

5 → 1 + sum (map (^2) [2 .. n])

6 ...

7 → 1 + (4 + sum (map (^2) [3 .. n]))

8 ...

9 → 1 + (4 + (9 + ... + n^2))

Nicio lista nu este efectiv construita în timpul evaluarii.

249 / 423

Page 770: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Suma patratelor

Suma patratelor numerelor naturale pâna la n,ca suma a elementelor unei liste:

1 sum (map (^2) [1 .. n])

2 → sum (map (^2) 1 : [2 .. n])

3 → sum (1^2 : (map (^2) [2 .. n]))

4 → 1^2 + sum (map (^2) [2 .. n])

5 → 1 + sum (map (^2) [2 .. n])

6 ...

7 → 1 + (4 + sum (map (^2) [3 .. n]))

8 ...

9 → 1 + (4 + (9 + ... + n^2))

Nicio lista nu este efectiv construita în timpul evaluarii.

249 / 423

Page 771: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Elementul minim al unei liste I

Elementul minim al unei liste, drept prim element alacesteia, dupa sortarea prin insert,ie (Thompson, 1999):

34 ins x [] = [x]

35 ins x (h : t)

36 | x <= h = x : h : t

37 | otherwise = h : (ins x t)

38

39 isort [] = []

40 isort (h : t) = ins h (isort t)

41

42 minList l = head (isort l)

250 / 423

Page 772: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Elementul minim al unei liste II

45 minList [3, 2, 1]

46 = head (isort [3, 2, 1])

47 = head (isort (3 : [2, 1]))

48 = head (ins 3 (isort [2, 1]))

49 = head (ins 3 (isort (2 : [1])))

50 = head (ins 3 (ins 2 (isort [1])))

51 = head (ins 3 (ins 2 (isort (1 : []))))

52 = head (ins 3 (ins 2 (ins 1 (isort []))))

53 = head (ins 3 (ins 2 (ins 1 [])))

54 = head (ins 3 (ins 2 (1 : [])))

55 = head (ins 3 (1 : ins 2 []))

56 = head (1 : (ins 3 (ins 2 [])))

57 = 1

Lista nu este efectiv sortata, minimul fiind, pur s, i simplu,adus în fat,a acesteia s, i întors.

251 / 423

Page 773: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Accesibilitatea într-un graf orientatAccesibilitatea între doua noduri dintr-un graf ⇔ existent,aelementelor în mult,imea tuturor cailor dintre cele douanoduri (Thompson, 1999):75 routes source dest graph explored

76 | source == dest = [[source]]

77 | otherwise = [ source : path

78 | neighbor <- neighbors source

graph \\ explored

79 , path <- routes neighbor dest

graph (source : explored)

80 ]

81

82 accessible source dest graph =

83 (routes source dest graph []) /= []

Backtracking desfas, urat doar pâna la determinareaprimului element al listei de cai.

252 / 423

Page 774: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluarea lenes, a

I Programare orientata spre date: exprimareaunor prelucrari în termenii unor operat,ii pe structuride date, posibil niciodata generate complet (sumapatratelor, sortare)

I Backtracking eficient: gasirea unui obiectcu o anumita proprietate, prin generarea aparentaa tuturor celor care îndeplinesc proprietatearespectiva (accesibilitatea în graf)

I Pilon al modularitat,ii eficiente — prelucrari distincteale unei structuri, aplicate într-o singura parcurgere!

253 / 423

Page 775: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Studiu de caz

Biblioteca de parsare (Thompson, 1999)

254 / 423

Page 776: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Bibliografie

Thompson, S. (1999). Haskell: The Craft of FunctionalProgramming. Edit,ia a doua. Addison-Wesley.

255 / 423

Page 777: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Partea IX

Clase în Haskell

256 / 423

Page 778: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Clase

Aplicat,ie pentru clase

257 / 423

Page 779: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Clase

Aplicat,ie pentru clase

258 / 423

Page 780: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Motivat,ie

Sa se defineasca operat,ia show, capabila sa producareprezentarea oricarui obiect ca s, ir de caractere.Comportamentul este specific fiecarui tip.

1 show 3 → "3"

2 show True → "True"

3 show ’a’ → "’a’"

4 show "a" → "\"a\""

259 / 423

Page 781: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Varianta 1 IFunct,ii dedicate fiecarui tip

1 show4Bool True = "True"

2 show4Bool False = "False"

3

4 show4Char c = "’" ++ [c] ++ "’"

5

6 show4String s = "\"" ++ s ++ "\""

260 / 423

Page 782: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Varianta 1 IIFunct,ii dedicate fiecarui tip

I Funct,ia showNewLine, care adauga caracterul “linienoua” la reprezentarea ca s, ir:1 showNewLine x = (show... x) ++ "\n"

I showNewLine nu poate fi polimorfica→ showNewLine4Bool, showNewLine4Char etc.

I Alternativ, trimiterea ca parametru a funct,iei show*,corespunzatoare:1 showNewLine sh x = (sh x) ++ "\n"

2 showNewLine4Bool = showNewLine show4Bool

I Prea general, fiind posibila trimiterea unei funct,iicu alt comportament, în masura în care respecta tipul

261 / 423

Page 783: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Varianta 2 ISupraîncarcarea funct,iei

I Definirea mult,imii Show, a tipurilor care expun show:1 class Show a where2 show :: a -> String3 ...

I Precizarea aderent,ei unui tip la aceasta mult,ime:1 instance Show Bool where2 show True = "True"

3 show False = "False"

4

5 instance Show Char where6 show c = "’" ++ [c] ++ "’"

I Funct,ia showNewLine polimorfica!1 showNewLine x = (show x) ++ "\n"

262 / 423

Page 784: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Varianta 2 IISupraîncarcarea funct,iei

I Ce tip au funct,iile show, respectiv showNewLine?1 show :: Show a => a -> String2 showNewLine :: Show a => a -> String

I “Daca tipul a este membru al clasei Show, i.e. funct,iashow este definita pe valorile tipului a, atunci funct,iileau tipul a -> String.”

I Context: constrângeri suplimentare asupravariabilelor din tipul funct,iei: Show a

I Propagarea constrângerilor din contextul lui showcatre contextul lui showNewLine

263 / 423

Page 785: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Varianta 2 IIISupraîncarcarea funct,iei

I Contexte utilizabile s, i la instant,iere:

1 instance (Show a, Show b) => Show (a, b) where2 show (x, y) = "(" ++ (show x)

3 ++ ", " ++ (show y)

4 ++ ")"

I “Ori de câte ori tipurile a s, i b apart,in clasei Show,tipul (a, b) îi apart,ine de asemenea.”

264 / 423

Page 786: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Clase

I Clasa = mult,ime de tipuri ce supraîncarca operat,iilespecifice clasei

I Modalitate structurata de control al polimorfismuluiad-hoc

I Exemplu: clasa Show, cu operat,ia show

265 / 423

Page 787: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Instant,e ale claselor

I Instant,a = tip care supraîncarca operat,iile clasei

I Exemplu: tipul Bool, în raport cu clasa Show

266 / 423

Page 788: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Clase predefinite I

1 class Show a where2 show :: a -> String3 ...

4

5 class Eq a where6 (==), (/=) :: a -> a -> Bool7 x /= y = not (x == y)

8 x == y = not (x /= y)

I Posibilitatea scrierii de definit,ii implicite (v. liniile 7–8)

I Necesitatea suprascrierii cel put,in unuia dintre cei doioperatori ai clasei Eq, pentru instant,ierea corecta

267 / 423

Page 789: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Clase predefinite II

1 class Eq a => Ord a where2 (<), (<=), (>=), (>) :: a -> a -> Bool3 ...

I Contexte utilzabile s, i la definirea unei clase

I Mos, tenirea claselor, cu preluarea operat,iilor din clasamos, tenita

I Necesitatea aderent,ei la clasa Eq în momentulinstant,ierii clasei Ord

I Suficient,a supradefinirii lui (<=) la instant,iere

268 / 423

Page 790: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Clase Haskell vs. POO

Haskell

I Mult,imi de tipuri

I Instant,ierea claselorde catre tipuri

I Implementarea operat,iilorîn afara definit,iei tipului

POO

I Mult,imi de obiecte: tipuri

I Implementarea interfet,elorde catre clase

I Implementarea operat,iilorîn cadrul definit,iei tipului

Clase Haskell ~ Interfet,e Java

269 / 423

Page 791: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Clase Haskell vs. POO

Haskell

I Mult,imi de tipuri

I Instant,ierea claselorde catre tipuri

I Implementarea operat,iilorîn afara definit,iei tipului

POO

I Mult,imi de obiecte: tipuri

I Implementarea interfet,elorde catre clase

I Implementarea operat,iilorîn cadrul definit,iei tipului

Clase Haskell ~ Interfet,e Java

269 / 423

Page 792: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Clase Haskell vs. POO

Haskell

I Mult,imi de tipuri

I Instant,ierea claselorde catre tipuri

I Implementarea operat,iilorîn afara definit,iei tipului

POO

I Mult,imi de obiecte: tipuri

I Implementarea interfet,elorde catre clase

I Implementarea operat,iilorîn cadrul definit,iei tipului

Clase Haskell ~ Interfet,e Java

269 / 423

Page 793: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Clase Haskell vs. POO

Haskell

I Mult,imi de tipuri

I Instant,ierea claselorde catre tipuri

I Implementarea operat,iilorîn afara definit,iei tipului

POO

I Mult,imi de obiecte: tipuri

I Implementarea interfet,elorde catre clase

I Implementarea operat,iilorîn cadrul definit,iei tipului

Clase Haskell ~ Interfet,e Java

269 / 423

Page 794: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Clase

Aplicat,ie pentru clase

270 / 423

Page 795: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

invert I

Fie constructorii de tip:

3 data Pair a = P a a

4

5 data NestedList a

6 = Atom a

7 | List [NestedList a]

Sa se defineasca operat,ia invert, aplicabila pe obiectede tipuri diferite, inclusiv Pair a s, i NestedList a,comportamentul fiind specific fiecarui tip.

271 / 423

Page 796: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

invert II

5 class Invert a where6 invert :: a -> a

7 invert = id8

9 instance Invert (Pair a) where10 invert (P x y) = P y x

11

12 instance Invert a => Invert (NestedList a) where13 invert (Atom x) = Atom (invert x)

14 invert (List x) = List $ reverse $ map invert x

15

16 instance Invert a => Invert [a] where17 invert lst = reverse $ map invert lst

Necesitatea contextului, în cazul tipurilor [a]s, i NestedList a, pentru inversarea elementelor înselor

272 / 423

Page 797: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

contents I

Sa se defineasca operat,ia contents, aplicabilape obiecte structurate, inclusiv pe cele apart,inând tipurilorPair a s, i NestedList a, care întoarce elementele,sub forma unei liste.

1 class Container a where2 contents :: a -> [??]

I a este tipul unui container, ca NestedList b

I Elementele listei întoarse sunt cele din container

I Cum precizam tipul acestora, b?

273 / 423

Page 798: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

contents II

1 class Container a where2 contents :: a -> [a]

3

4 instance Container [a] where5 contents = id

I Conform definit,iei clasei:1 contents :: Container [a] => [a] -> [[a]]

I Conform supraîncarcarii funct,iei (id):1 contents :: Container [a] => [a] -> [a]

I Ecuat,ia [a] = [[a]] nu are solut,ie — eroare!

274 / 423

Page 799: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

contents III1 class Container a where2 contents :: a -> [b]

3

4 instance Container [a] where5 contents = id

I Conform definit,iei clasei:1 contents :: Container [a] => [a] -> [b]

I Conform supraîncarcarii funct,iei (id):1 contents :: Container [a] => [a] -> [a]

I Ecuat,ia [a] = [b] are solut,ie pentru a = b

I Dar, [a] -> [a] insuficient de general în raportcu [a] -> [b] — eroare!

275 / 423

Page 800: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

contents IV

Solut,ie: clasa primes, te constructorul de tip,s, i nu tipul container propriu-zis

5 class Container t where6 contents :: t a -> [a]

7

8 instance Container Pair where -- nu (Pair a)!

9 contents (P x y) = [x, y]

10

11 instance Container NestedList where12 contents (Atom x) = [x]

13 contents (List l) = concatMap contents l

14

15 instance Container [] where16 contents = id

276 / 423

Page 801: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Contexte I6 fun1 :: Eq a => a -> a -> a -> a

7 fun1 x y z = if x == y then x else z

8

9 fun2 :: (Container a, Invert (a b), Eq (a b))

10 => (a b) -> (a b) -> [b]

11 fun2 x y = if (invert x) == (invert y)

12 then contents x

13 else contents y

14

15 fun3 :: Invert a => [a] -> [a] -> [a]

16 fun3 x y = (invert x) ++ (invert y)

17

18 fun4 :: Ord a => a -> a -> a -> a

19 fun4 x y z = if x == y

20 then z

21 else if x > y

22 then x

23 else y

277 / 423

Page 802: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Contexte II

I Simplificarea contextului lui fun3, de la Invert [a]

la Invert a

I Simplificarea contextului lui fun4, de la(Eq a, Ord a) la Ord a, din moment ce clasa Ord

este derivata din clasa Eq

278 / 423

Page 803: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

RezumatI Clase = mult,imi de tipuri care supraîncarca

anumite operat,ii

I Forma de polimorfism ad-hoc: tipuri diferite,comportamente diferite

I Instant,ierea unei clase = aderarea unui tip la o clasa

I Derivarea unei clase = impunerea condit,iei ca un tipsa fie deja membru al clasei parinte, în momentulinstant,ierii clasei copil, s, i mos, tenirea operat,iilordin clasa parinte

I Context = mult,imea constrângerilor asupra tipurilordin signatura unei funct,ii, în termenii aderent,eila diverse clase

279 / 423

Page 804: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Partea X

Paradigma funct,ionalavs. paradigma imperativa

280 / 423

Page 805: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Efecte laterale s, i transparent,a referent,iala

Aspecte comparative

Aplicat,ii ale programarii funct,ionale

281 / 423

Page 806: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Efecte laterale s, i transparent,a referent,iala

Aspecte comparative

Aplicat,ii ale programarii funct,ionale

282 / 423

Page 807: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Efecte laterale (side effects)Definit,ie

I În expresia 2 + (i = 3), subexpresia (i = 3):

I produce valoarea 3, conducând la rezultatul 5pentru întreaga expresie

I are efectul lateral de init,ializare a lui i cu 3

I Inerente în situat,iile în care programulinteract,ioneaza cu exteriorul — I/O!

283 / 423

Page 808: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Efecte laterale (side effects)Definit,ie

I În expresia 2 + (i = 3), subexpresia (i = 3):I produce valoarea 3, conducând la rezultatul 5

pentru întreaga expresie

I are efectul lateral de init,ializare a lui i cu 3

I Inerente în situat,iile în care programulinteract,ioneaza cu exteriorul — I/O!

283 / 423

Page 809: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Efecte laterale (side effects)Definit,ie

I În expresia 2 + (i = 3), subexpresia (i = 3):I produce valoarea 3, conducând la rezultatul 5

pentru întreaga expresieI are efectul lateral de init,ializare a lui i cu 3

I Inerente în situat,iile în care programulinteract,ioneaza cu exteriorul — I/O!

283 / 423

Page 810: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Efecte laterale (side effects)Definit,ie

I În expresia 2 + (i = 3), subexpresia (i = 3):I produce valoarea 3, conducând la rezultatul 5

pentru întreaga expresieI are efectul lateral de init,ializare a lui i cu 3

I Inerente în situat,iile în care programulinteract,ioneaza cu exteriorul — I/O!

283 / 423

Page 811: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Efecte laterale (side effects)Consecint,e

I În expresia x-- + ++x, cu x = 0:

I evaluarea stânga-dreapta produce 0 + 0 = 0

I evaluarea dreapta-stânga produce 1 + 1 = 2

I daca înlocuim cele doua subexpresiicu valorile pe care le reprezinta, obt,inemx + (x + 1) = 0 + 1 = 1

I Adunare necomutativa?!

I Important,a ordinii de evaluare!

I Dependent,e implicite, dificil de desprins s, i posibilegeneratoare de bug-uri

284 / 423

Page 812: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Efecte laterale (side effects)Consecint,e

I În expresia x-- + ++x, cu x = 0:I evaluarea stânga-dreapta produce 0 + 0 = 0

I evaluarea dreapta-stânga produce 1 + 1 = 2

I daca înlocuim cele doua subexpresiicu valorile pe care le reprezinta, obt,inemx + (x + 1) = 0 + 1 = 1

I Adunare necomutativa?!

I Important,a ordinii de evaluare!

I Dependent,e implicite, dificil de desprins s, i posibilegeneratoare de bug-uri

284 / 423

Page 813: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Efecte laterale (side effects)Consecint,e

I În expresia x-- + ++x, cu x = 0:I evaluarea stânga-dreapta produce 0 + 0 = 0

I evaluarea dreapta-stânga produce 1 + 1 = 2

I daca înlocuim cele doua subexpresiicu valorile pe care le reprezinta, obt,inemx + (x + 1) = 0 + 1 = 1

I Adunare necomutativa?!

I Important,a ordinii de evaluare!

I Dependent,e implicite, dificil de desprins s, i posibilegeneratoare de bug-uri

284 / 423

Page 814: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Efecte laterale (side effects)Consecint,e

I În expresia x-- + ++x, cu x = 0:I evaluarea stânga-dreapta produce 0 + 0 = 0

I evaluarea dreapta-stânga produce 1 + 1 = 2

I daca înlocuim cele doua subexpresiicu valorile pe care le reprezinta, obt,inemx + (x + 1) = 0 + 1 = 1

I Adunare necomutativa?!

I Important,a ordinii de evaluare!

I Dependent,e implicite, dificil de desprins s, i posibilegeneratoare de bug-uri

284 / 423

Page 815: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Efecte laterale (side effects)Consecint,e

I În expresia x-- + ++x, cu x = 0:I evaluarea stânga-dreapta produce 0 + 0 = 0

I evaluarea dreapta-stânga produce 1 + 1 = 2

I daca înlocuim cele doua subexpresiicu valorile pe care le reprezinta, obt,inemx + (x + 1) = 0 + 1 = 1

I Adunare necomutativa?!

I Important,a ordinii de evaluare!

I Dependent,e implicite, dificil de desprins s, i posibilegeneratoare de bug-uri

284 / 423

Page 816: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Efecte laterale (side effects)Consecint,e

I În expresia x-- + ++x, cu x = 0:I evaluarea stânga-dreapta produce 0 + 0 = 0

I evaluarea dreapta-stânga produce 1 + 1 = 2

I daca înlocuim cele doua subexpresiicu valorile pe care le reprezinta, obt,inemx + (x + 1) = 0 + 1 = 1

I Adunare necomutativa?!

I Important,a ordinii de evaluare!

I Dependent,e implicite, dificil de desprins s, i posibilegeneratoare de bug-uri

284 / 423

Page 817: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Efecte laterale (side effects)Consecint,e

I În expresia x-- + ++x, cu x = 0:I evaluarea stânga-dreapta produce 0 + 0 = 0

I evaluarea dreapta-stânga produce 1 + 1 = 2

I daca înlocuim cele doua subexpresiicu valorile pe care le reprezinta, obt,inemx + (x + 1) = 0 + 1 = 1

I Adunare necomutativa?!

I Important,a ordinii de evaluare!

I Dependent,e implicite, dificil de desprins s, i posibilegeneratoare de bug-uri

284 / 423

Page 818: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Transparent,a referent,iala

I Zeus la greci ≡ Jupiter la romani (Wooldridge s, i Jennings, 1995)

1. Cazul 1:

I “Zeus este fiul lui Cronos”

I “Jupiter este fiul lui Cronos”

I aceeas, i semnificat,ie

2. Cazul 2:

I “Ionel s, tie ca Zeus este fiul lui Cronos”

I “Ionel s, tie ca Jupiter este fiul lui Cronos”

I alta semnificat,ie

I Transparent,a referent,iala = independent,a înt,elesuluiunei propozit,ii în raport cu modul de desemnarea obiectelor — cazul 1.

285 / 423

Page 819: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Transparent,a referent,iala

I Zeus la greci ≡ Jupiter la romani (Wooldridge s, i Jennings, 1995)

1. Cazul 1:

I “Zeus este fiul lui Cronos”

I “Jupiter este fiul lui Cronos”

I aceeas, i semnificat,ie

2. Cazul 2:

I “Ionel s, tie ca Zeus este fiul lui Cronos”

I “Ionel s, tie ca Jupiter este fiul lui Cronos”

I alta semnificat,ie

I Transparent,a referent,iala = independent,a înt,elesuluiunei propozit,ii în raport cu modul de desemnarea obiectelor — cazul 1.

285 / 423

Page 820: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Transparent,a referent,iala

I Zeus la greci ≡ Jupiter la romani (Wooldridge s, i Jennings, 1995)

1. Cazul 1:I “Zeus este fiul lui Cronos”

I “Jupiter este fiul lui Cronos”

I aceeas, i semnificat,ie

2. Cazul 2:

I “Ionel s, tie ca Zeus este fiul lui Cronos”

I “Ionel s, tie ca Jupiter este fiul lui Cronos”

I alta semnificat,ie

I Transparent,a referent,iala = independent,a înt,elesuluiunei propozit,ii în raport cu modul de desemnarea obiectelor — cazul 1.

285 / 423

Page 821: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Transparent,a referent,iala

I Zeus la greci ≡ Jupiter la romani (Wooldridge s, i Jennings, 1995)

1. Cazul 1:I “Zeus este fiul lui Cronos”

I “Jupiter este fiul lui Cronos”

I aceeas, i semnificat,ie

2. Cazul 2:

I “Ionel s, tie ca Zeus este fiul lui Cronos”

I “Ionel s, tie ca Jupiter este fiul lui Cronos”

I alta semnificat,ie

I Transparent,a referent,iala = independent,a înt,elesuluiunei propozit,ii în raport cu modul de desemnarea obiectelor — cazul 1.

285 / 423

Page 822: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Transparent,a referent,iala

I Zeus la greci ≡ Jupiter la romani (Wooldridge s, i Jennings, 1995)

1. Cazul 1:I “Zeus este fiul lui Cronos”

I “Jupiter este fiul lui Cronos”

I aceeas, i semnificat,ie

2. Cazul 2:

I “Ionel s, tie ca Zeus este fiul lui Cronos”

I “Ionel s, tie ca Jupiter este fiul lui Cronos”

I alta semnificat,ie

I Transparent,a referent,iala = independent,a înt,elesuluiunei propozit,ii în raport cu modul de desemnarea obiectelor — cazul 1.

285 / 423

Page 823: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Transparent,a referent,iala

I Zeus la greci ≡ Jupiter la romani (Wooldridge s, i Jennings, 1995)

1. Cazul 1:I “Zeus este fiul lui Cronos”

I “Jupiter este fiul lui Cronos”

I aceeas, i semnificat,ie

2. Cazul 2:

I “Ionel s, tie ca Zeus este fiul lui Cronos”

I “Ionel s, tie ca Jupiter este fiul lui Cronos”

I alta semnificat,ie

I Transparent,a referent,iala = independent,a înt,elesuluiunei propozit,ii în raport cu modul de desemnarea obiectelor — cazul 1.

285 / 423

Page 824: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Transparent,a referent,iala

I Zeus la greci ≡ Jupiter la romani (Wooldridge s, i Jennings, 1995)

1. Cazul 1:I “Zeus este fiul lui Cronos”

I “Jupiter este fiul lui Cronos”

I aceeas, i semnificat,ie

2. Cazul 2:

I “Ionel s, tie ca Zeus este fiul lui Cronos”

I “Ionel s, tie ca Jupiter este fiul lui Cronos”

I alta semnificat,ie

I Transparent,a referent,iala = independent,a înt,elesuluiunei propozit,ii în raport cu modul de desemnarea obiectelor — cazul 1.

285 / 423

Page 825: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Transparent,a referent,iala

I Zeus la greci ≡ Jupiter la romani (Wooldridge s, i Jennings, 1995)

1. Cazul 1:I “Zeus este fiul lui Cronos”

I “Jupiter este fiul lui Cronos”

I aceeas, i semnificat,ie

2. Cazul 2:I “Ionel s, tie ca Zeus este fiul lui Cronos”

I “Ionel s, tie ca Jupiter este fiul lui Cronos”

I alta semnificat,ie

I Transparent,a referent,iala = independent,a înt,elesuluiunei propozit,ii în raport cu modul de desemnarea obiectelor — cazul 1.

285 / 423

Page 826: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Transparent,a referent,iala

I Zeus la greci ≡ Jupiter la romani (Wooldridge s, i Jennings, 1995)

1. Cazul 1:I “Zeus este fiul lui Cronos”

I “Jupiter este fiul lui Cronos”

I aceeas, i semnificat,ie

2. Cazul 2:I “Ionel s, tie ca Zeus este fiul lui Cronos”

I “Ionel s, tie ca Jupiter este fiul lui Cronos”

I alta semnificat,ie

I Transparent,a referent,iala = independent,a înt,elesuluiunei propozit,ii în raport cu modul de desemnarea obiectelor — cazul 1.

285 / 423

Page 827: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Transparent,a referent,iala

I Zeus la greci ≡ Jupiter la romani (Wooldridge s, i Jennings, 1995)

1. Cazul 1:I “Zeus este fiul lui Cronos”

I “Jupiter este fiul lui Cronos”

I aceeas, i semnificat,ie

2. Cazul 2:I “Ionel s, tie ca Zeus este fiul lui Cronos”

I “Ionel s, tie ca Jupiter este fiul lui Cronos”

I alta semnificat,ie

I Transparent,a referent,iala = independent,a înt,elesuluiunei propozit,ii în raport cu modul de desemnarea obiectelor — cazul 1.

285 / 423

Page 828: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Transparent,a referent,iala

I Zeus la greci ≡ Jupiter la romani (Wooldridge s, i Jennings, 1995)

1. Cazul 1:I “Zeus este fiul lui Cronos”

I “Jupiter este fiul lui Cronos”

I aceeas, i semnificat,ie

2. Cazul 2:I “Ionel s, tie ca Zeus este fiul lui Cronos”

I “Ionel s, tie ca Jupiter este fiul lui Cronos”

I alta semnificat,ie

I Transparent,a referent,iala = independent,a înt,elesuluiunei propozit,ii în raport cu modul de desemnarea obiectelor — cazul 1.

285 / 423

Page 829: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Transparent,a referent,iala

I Zeus la greci ≡ Jupiter la romani (Wooldridge s, i Jennings, 1995)

1. Cazul 1:I “Zeus este fiul lui Cronos”

I “Jupiter este fiul lui Cronos”

I aceeas, i semnificat,ie

2. Cazul 2:I “Ionel s, tie ca Zeus este fiul lui Cronos”

I “Ionel s, tie ca Jupiter este fiul lui Cronos”

I alta semnificat,ie

I Transparent,a referent,iala = independent,a înt,elesuluiunei propozit,ii în raport cu modul de desemnarea obiectelor — cazul 1.

285 / 423

Page 830: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Expresii transparente referent,ial

One of the most useful properties of expressions is[. . . ] referential transparency. In essence this meansthat if we wish to find the value of an expressionwhich contains a sub-expression, the only thing weneed to know about the sub-expression is its value.Any other features of the sub-expression, such as itsinternal structure, the number and nature of itscomponents, the order in which they are evaluatedor the colour of the ink in which they are written, areirrelevant to the value of the main expression.

Christopher Strachey,Fundamental Concepts in Programming Languages

286 / 423

Page 831: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Expresii transparente referent,ial

The only thing that matters about an expression is itsvalue, and any subexpression can be replaced byany other equal in value. Moreover, the value of anexpression is, within certain limits, the samewhenever it occurs.

Joseph Stoy,Denotational semantics: the Scott-Stracheyapproach to programming language theory

287 / 423

Page 832: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Expresii transparente referent,ial

I Expresii (ne)transparente referent,ial:

I x-- + ++x

: nu, valoarea depinde de ordineade evaluare

I x = x + 1

: nu, doua evaluari consecutivevor produce rezultate diferite

I x

: da, presupunând ca x nu este modificataîn alta parte

I Efecte laterale ⇒ opacitate referent,iala!

288 / 423

Page 833: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Expresii transparente referent,ial

I Expresii (ne)transparente referent,ial:I x-- + ++x

: nu, valoarea depinde de ordineade evaluare

I x = x + 1

: nu, doua evaluari consecutivevor produce rezultate diferite

I x

: da, presupunând ca x nu este modificataîn alta parte

I Efecte laterale ⇒ opacitate referent,iala!

288 / 423

Page 834: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Expresii transparente referent,ial

I Expresii (ne)transparente referent,ial:I x-- + ++x : nu, valoarea depinde de ordinea

de evaluare

I x = x + 1

: nu, doua evaluari consecutivevor produce rezultate diferite

I x

: da, presupunând ca x nu este modificataîn alta parte

I Efecte laterale ⇒ opacitate referent,iala!

288 / 423

Page 835: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Expresii transparente referent,ial

I Expresii (ne)transparente referent,ial:I x-- + ++x : nu, valoarea depinde de ordinea

de evaluareI x = x + 1

: nu, doua evaluari consecutivevor produce rezultate diferite

I x

: da, presupunând ca x nu este modificataîn alta parte

I Efecte laterale ⇒ opacitate referent,iala!

288 / 423

Page 836: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Expresii transparente referent,ial

I Expresii (ne)transparente referent,ial:I x-- + ++x : nu, valoarea depinde de ordinea

de evaluareI x = x + 1 : nu, doua evaluari consecutive

vor produce rezultate diferite

I x

: da, presupunând ca x nu este modificataîn alta parte

I Efecte laterale ⇒ opacitate referent,iala!

288 / 423

Page 837: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Expresii transparente referent,ial

I Expresii (ne)transparente referent,ial:I x-- + ++x : nu, valoarea depinde de ordinea

de evaluareI x = x + 1 : nu, doua evaluari consecutive

vor produce rezultate diferiteI x

: da, presupunând ca x nu este modificataîn alta parte

I Efecte laterale ⇒ opacitate referent,iala!

288 / 423

Page 838: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Expresii transparente referent,ial

I Expresii (ne)transparente referent,ial:I x-- + ++x : nu, valoarea depinde de ordinea

de evaluareI x = x + 1 : nu, doua evaluari consecutive

vor produce rezultate diferiteI x : da, presupunând ca x nu este modificata

în alta parte

I Efecte laterale ⇒ opacitate referent,iala!

288 / 423

Page 839: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Expresii transparente referent,ial

I Expresii (ne)transparente referent,ial:I x-- + ++x : nu, valoarea depinde de ordinea

de evaluareI x = x + 1 : nu, doua evaluari consecutive

vor produce rezultate diferiteI x : da, presupunând ca x nu este modificata

în alta parte

I Efecte laterale ⇒ opacitate referent,iala!

288 / 423

Page 840: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ii transparente referent,ial

Funct,ie transparenta referent,ial:rezultatul întors depinde exclusiv de parametri

1 int transparent(int x) {

2 return x + 1;

3 }

5 int g = 0;

6

7 int opaque(int x) {

8 return x + ++g;

9 }

10

11 // opaque(3) != opaque(3)

I Funct,ii transparente: log, sin etc.I Funct,ii opace: time, read etc.

289 / 423

Page 841: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ii transparente referent,ial

Funct,ie transparenta referent,ial:rezultatul întors depinde exclusiv de parametri

1 int transparent(int x) {

2 return x + 1;

3 }

5 int g = 0;

6

7 int opaque(int x) {

8 return x + ++g;

9 }

10

11 // opaque(3) != opaque(3)

I Funct,ii transparente: log, sin etc.I Funct,ii opace: time, read etc.

289 / 423

Page 842: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Înlant,uirea funct,iilor

outf5

f3

f1in1

f2in2

f4in3

290 / 423

Page 843: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Calcul fara stare

Dependent,a ies, irii de intrare, nu s, i de timp

x

f

t0

y

291 / 423

Page 844: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Calcul fara stare

Dependent,a ies, irii de intrare, nu s, i de timp

x f

t1

y

291 / 423

Page 845: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Calcul fara stare

Dependent,a ies, irii de intrare, nu s, i de timp

x f

t2

y

291 / 423

Page 846: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Calcul cu stare

Dependent,a ies, irii de intrare, s, i de timp

x

f

t0

y ′ 6= y

292 / 423

Page 847: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Calcul cu stare

Dependent,a ies, irii de intrare, s, i de timp

x f

t1

y

′ 6= y

292 / 423

Page 848: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Calcul cu stare

Dependent,a ies, irii de intrare, s, i de timp

x f

t2

y ′ 6= y

292 / 423

Page 849: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Calcul cu stare

outf5

f3

f1in1

f2in2

f4in3

Stare = mult,imea valorilor variabilelor, la un anumitmoment, ce pot influent,a rezultatul evaluarii aceleias, iexpresii.

293 / 423

Page 850: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Calcul cu stare

outf5

f3

f1in1

f2in2

f4in3

stare

Stare = mult,imea valorilor variabilelor, la un anumitmoment, ce pot influent,a rezultatul evaluarii aceleias, iexpresii.

293 / 423

Page 851: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Avantajele transparent,ei referent,iale

I Lizibilitatea codului

I Demonstrarea formala a corectitudinii programului

I Optimizare prin reordonarea instruct,iunilorde catre compilator, s, i prin caching

I Paralelizare masiva, în urma eliminarii modificarilorconcurente

I Evaluare lenes, a, imposibila în absent,a unei garant,iidespre ment,inerea valorii unei expresii, la momentediferite!

294 / 423

Page 852: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Avantajele transparent,ei referent,iale

I Lizibilitatea codului

I Demonstrarea formala a corectitudinii programului

I Optimizare prin reordonarea instruct,iunilorde catre compilator, s, i prin caching

I Paralelizare masiva, în urma eliminarii modificarilorconcurente

I Evaluare lenes, a, imposibila în absent,a unei garant,iidespre ment,inerea valorii unei expresii, la momentediferite!

294 / 423

Page 853: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Avantajele transparent,ei referent,iale

I Lizibilitatea codului

I Demonstrarea formala a corectitudinii programului

I Optimizare prin reordonarea instruct,iunilorde catre compilator, s, i prin caching

I Paralelizare masiva, în urma eliminarii modificarilorconcurente

I Evaluare lenes, a, imposibila în absent,a unei garant,iidespre ment,inerea valorii unei expresii, la momentediferite!

294 / 423

Page 854: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Avantajele transparent,ei referent,iale

I Lizibilitatea codului

I Demonstrarea formala a corectitudinii programului

I Optimizare prin reordonarea instruct,iunilorde catre compilator, s, i prin caching

I Paralelizare masiva, în urma eliminarii modificarilorconcurente

I Evaluare lenes, a, imposibila în absent,a unei garant,iidespre ment,inerea valorii unei expresii, la momentediferite!

294 / 423

Page 855: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Avantajele transparent,ei referent,iale

I Lizibilitatea codului

I Demonstrarea formala a corectitudinii programului

I Optimizare prin reordonarea instruct,iunilorde catre compilator, s, i prin caching

I Paralelizare masiva, în urma eliminarii modificarilorconcurente

I Evaluare lenes, a, imposibila în absent,a unei garant,iidespre ment,inerea valorii unei expresii, la momentediferite!

294 / 423

Page 856: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Efecte laterale s, i transparent,a referent,iala

Aspecte comparative

Aplicat,ii ale programarii funct,ionale

295 / 423

Page 857: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Explicitarea sensului programelor

1: procedure MINLIST(L,n)2: min← L[1]

3: i ← 24: while i ≤ n do5: if L[i ] < min then6: min← L[i ]7: end if8: i ← i + 19: end while

10: return min11: end procedure

1 minList [h] = h

2 minList (h : t) = min h $ minList t

296 / 423

Page 858: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Verificarea programelor

Funct,ional

I Definit,ia unei funct,ii =proprietate pe care oîndeplines, te

I Aplicabilitatea directa ametodelor, e.g induct,iestructurala

Imperativ

I Necesitatea adnotariiprogramelor cudescriptori de stare

I Necesitatea aplicarii demetode indirecte, bazatepe adnotari

297 / 423

Page 859: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Funct,ii s, i variabile

Funct,ional

I Funct,ii cu aceleas, i valoripentru aceias, i parametri

I Variabile nemodificabile

Imperativ

I Funct,ii cu valori diferitepentru aceias, i parametri

I Variabile modificabile

298 / 423

Page 860: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluare lenes, a

I Posibila doar în absent,a efectelor laterale

I Modularitate eficienta,separat,ie producator-consumator

I Fluxuri

299 / 423

Page 861: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Problema expresivitat,ii

Extinderea tipurilor Extinderea operat,iilorFunct,ional Dificila Us, oaraOO Us, oara Dificila

300 / 423

Page 862: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Alte aspecte

I Funct,ionale ca structuri de control

I Tipuri algebrice

I Polimorfism

301 / 423

Page 863: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Efecte laterale s, i transparent,a referent,iala

Aspecte comparative

Aplicat,ii ale programarii funct,ionale

302 / 423

Page 864: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Aplicat,ii ale programarii funct,ionale I

I PureScript, translator Haskell → JavaScript:(http://www.purescript.org/)

I Yesod Web Framework for Haskell(http://www.yesodweb.com/)

I Back-end Haskell pentru Android(https://wiki.haskell.org/Android)

I Yampa, EDSL în Haskellpentru Functional Reactive Programming (FRP)(https://wiki.haskell.org/Yampa)

303 / 423

Page 865: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Aplicat,ii ale programarii funct,ionale II

I Programare paralela(http://chimera.labs.oreilly.com/books/1230000000929)

I Utilizare Haskell la Google s, i Facebook:(https://code.facebook.com/posts/745068642270222/fighting-spam-with-haskell/)

I Construct,ii lambda s, i funct,ionale, introduseîn C++, Java 8, Swift(https://developer.apple.com/swift/)

304 / 423

Page 866: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Bibliografie

Thompson, S. (2011). Haskell: The Craft of FunctionalProgramming. Edit,ia a treia. Addison-Wesley.

Wooldridge, M. s, i Jennings, N. R. (1995). IntelligentAgents: Theory and Practice. Knowledge EngineeringReview, 10:115–152.

305 / 423

Page 867: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Partea XI

Limbajul Prolog

306 / 423

Page 868: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Axiome s, i reguli

Procesul de demonstrare

Controlul execut,iei

Caracteristici

307 / 423

Page 869: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Axiome s, i reguli

Procesul de demonstrare

Controlul execut,iei

Caracteristici

308 / 423

Page 870: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Un prim exemplu

1 % constante -> litera mica

2 parent(andrei, bogdan).

3 parent(andrei, bianca).

4 parent(bogdan, cristi).

5

6 % variabile -> litera mare

7 grandparent(X, Y) :- parent(X, Z), parent(Z, Y).

I

true⇒

parent(andrei ,bogdan)

I

true⇒

parent(andrei ,bianca)

I

true⇒

parent(bogdan,cristi)I ∀x .∀y .∀z.

(parent(x ,z)∧parent(z,y)⇒ grandparent(x ,y))

309 / 423

Page 871: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Un prim exemplu

1 % constante -> litera mica

2 parent(andrei, bogdan).

3 parent(andrei, bianca).

4 parent(bogdan, cristi).

5

6 % variabile -> litera mare

7 grandparent(X, Y) :- parent(X, Z), parent(Z, Y).

I true⇒ parent(andrei ,bogdan)

I true⇒ parent(andrei ,bianca)

I true⇒ parent(bogdan,cristi)I ∀x .∀y .∀z.

(parent(x ,z)∧parent(z,y)⇒ grandparent(x ,y))

309 / 423

Page 872: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Interogari1 ?- parent(andrei, bogdan).

2 true .

3

4 ?- parent(andrei, cristi).

5 false.

6

7 ?- parent(andrei, X).

8 X = bogdan ;

9 X = bianca.

10

11 ?- grandparent(X, Y).

12 X = andrei,

13 Y = cristi ;

14 false.

I “.” → oprire dupa primul raspuns

I “;” → solicitarea urmatorului raspuns

310 / 423

Page 873: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Concatenarea a doua liste

1 % append(L1, L2, Res)

2 append([], L, L).

3 append([H|T], L, [H|Res]) :- append(T, L, Res).

Calcul1 ?- append([1], [2], Res).

2 Res = [1, 2].

Generare1 ?- append(L1, L2, [1, 2]).

2 L1 = [],

3 L2 = [1, 2] ;

4 L1 = [1],

5 L2 = [2] ;

6 L1 = [1, 2],

7 L2 = [] ;

8 false.

Estomparea granit,elor dintre “intrare” s, i “ies, ire”

311 / 423

Page 874: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Concatenarea a doua liste

1 % append(L1, L2, Res)

2 append([], L, L).

3 append([H|T], L, [H|Res]) :- append(T, L, Res).

Calcul1 ?- append([1], [2], Res).

2 Res = [1, 2].

Generare1 ?- append(L1, L2, [1, 2]).

2 L1 = [],

3 L2 = [1, 2] ;

4 L1 = [1],

5 L2 = [2] ;

6 L1 = [1, 2],

7 L2 = [] ;

8 false.

Estomparea granit,elor dintre “intrare” s, i “ies, ire”

311 / 423

Page 875: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Axiome s, i reguli

Procesul de demonstrare

Controlul execut,iei

Caracteristici

312 / 423

Page 876: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemplul genealogic I

S = /0G = {gp(X, Y)}

gp(X1, Y1) :-p(X1, Z1), p(Z1, Y1)

S = {X = X1, Y = Y1}G = {p(X1, Z1), p(Z1, Y1)}

p(andrei, bogdan)

. . .

p(andrei, bianca)

. . .

p(bogdan, cristi)

. . .

313 / 423

Page 877: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemplul genealogic II. . .

p(andrei, bogdan)

S = {X = X1, Y = Y1, X1 = andrei, Z1 = bogdan}G = {p(bogdan, Y1)}

p(bogdan, cristi)

S = {X = X1, Y = Y1, X1 = andrei, Z1 = bogdan, Y1 = cristi}G = /0

succes

314 / 423

Page 878: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemplul genealogic III

. . .

p(andrei, bianca)

S = {X = X1, Y = Y1, X1 = andrei, Z1 = bianca}G = {p(bianca, Y1)}

es, ec

315 / 423

Page 879: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemplul genealogic IV

. . .

p(bogdan, cristi)

S = {X = X1, Y = Y1, X1 = bogdan, Z1 = cristi}G = {p(cristi, Y1)}

es, ec

316 / 423

Page 880: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Pas, i în demonstrare I

1. Init,ializarea stivei de scopuri cu scopul solicitat

2. Init,ializarea substitut,iei utilizate pe parcursul unificariicu mult,imea vida

3. Extragerea scopului din vârful stivei s, i determinareaprimei clauze din program cu a carei concluzie unifica

4. Îmbogat,irea corespunzatoare a substitut,iei s, iadaugarea premiselor clauzei în stiva, în ordinea dinprogram

5. Salt la pasul 3

317 / 423

Page 881: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Pas, i în demonstrare II

6. În cazul imposibilitat,ii satisfacerii scopului din vârfulstivei, revenirea la scopul anterior (backtracking),s, i încercarea altei modalitat,i de satisfacere

7. Succes la golirea stivei de scopuri

8. Es, ec la imposibilitatea satisfacerii ultimului scopdin stiva

318 / 423

Page 882: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Observat,ii

I Ordinea clauzelor în program

I Ordinea premiselor în cadrul regulilor

I Recomandare: premisele mai us, or de satisfacut,primele — exemplu: axiome

319 / 423

Page 883: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Strategii de control

Forward chaining (data-driven)

I Premise → scopI Derivarea tuturor concluziilor posibileI Oprire la obt,inerea scopului (scopurilor)

Backward chaining (goal-driven)

I Scop → premiseI Utilizarea exclusiva a regulilor care pot contribui

efectiv la satisfacerea scopuluiI Satisfacerea premiselor acestor reguli s, .a.m.d.

320 / 423

Page 884: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Axiome s, i reguli

Procesul de demonstrare

Controlul execut,iei

Caracteristici

321 / 423

Page 885: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Minimul a doua numere I

1 min(X, Y, M) :- X =< Y, M is X.

2 min(X, Y, M) :- X > Y, M is Y.

3

4 min2(X, Y, M) :- X =< Y, M = X.

5 min2(X, Y, M) :- X > Y, M = Y.

6

7 % Echivalent cu min2.

8 min3(X, Y, X) :- X =< Y.

9 min3(X, Y, Y) :- X > Y.

322 / 423

Page 886: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Minimul a doua numere II

1 ?- min(1+2, 3+4, M).

2 M = 3 ;

3 false.

4

5 ?- min(3+4, 1+2, M).

6 M = 3.

7

8 ?- min2(1+2, 3+4, M).

9 M = 1+2 ;

10 false.

11

12 ?- min2(3+4, 1+2, M).

13 M = 1+2.

323 / 423

Page 887: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Minimul a doua numere III

Condit,ii mutual exclusive: X =< Y s, i X > Y — cum putemelimina redundant,a?

12 min4(X, Y, X) :- X =< Y.

13 min4(X, Y, Y).

1 ?- min4(1+2, 3+4, M).

2 M = 1+2 ;

3 M = 3+4.

Gres, it!

324 / 423

Page 888: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Minimul a doua numere IV

Solut,ie: oprirea recursivitat,ii dupa prima satisfacerea scopului

15 min5(X, Y, X) :- X =< Y, !.

16 min5(X, Y, Y).

1 ?- min5(1+2, 3+4, M).

2 M = 1+2.

325 / 423

Page 889: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Operatorul cut I

I La prima întâlnire: satisfacere

I La a doua întâlnire, în momentul revenirii(backtracking): es, ec, cu inhibarea tuturor cailorulterioare de satisfacere a scopului care a unificatcu concluzia regulii curente

I Utilitate în eficientizarea programelor

326 / 423

Page 890: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Operatorul cut II

1 girl(mary).

2 girl(ann).

3

4 boy(john).

5 boy(bill).

6

7 pair(X, Y) :- girl(X), boy(Y).

8 pair(bella, harry).

9

10 pair2(X, Y) :- girl(X), !, boy(Y).

11 pair2(bella, harry).

Backtracking doar la dreapta operatorului

327 / 423

Page 891: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Operatorul cut III

1 ?- pair(X, Y).

2 X = mary,

3 Y = john ;

4 X = mary,

5 Y = bill ;

6 X = ann,

7 Y = john ;

8 X = ann,

9 Y = bill ;

10 X = bella,

11 Y = harry.

1 ?- pair2(X, Y).

2 X = mary,

3 Y = john ;

4 X = mary,

5 Y = bill.

328 / 423

Page 892: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Axiome s, i reguli

Procesul de demonstrare

Controlul execut,iei

Caracteristici

329 / 423

Page 893: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Programare logica

I Reprezentare simbolica

I Stil declarativ

I Separarea datelor de procesul de inferent,a,incorporat în limbaj

I Uniformitatea reprezentarii axiomelors, i a regulilor de derivare

I Reprezentarea modularizata a cunos, tint,elor

I Posibilitatea modificarii dinamice a programelor,prin adaugarea s, i retragerea axiomelor s, i a regulilor

330 / 423

Page 894: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Prolog I

I Bazat pe logica cu predicate de ordin 1, restrict,ionata

I “Calculul”: satisfacerea de scopuri,prin reducere la absurd

I Regula de inferent,a: rezolut,ia

I Strategia de control, în evolut,ia demonstrat,iilor:I backward chaining: de la scop catre axiomeI parcurgere în adâncime, în arborele de derivare

I Parcurgerea în adâncime:I pericolul coborârii pe o cale infinita, ce nu cont,ine

solut,ia — strategie incompletaI eficient,a sporita în utilizarea spat,iului

331 / 423

Page 895: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Prolog III Exclusiv clauze Horn:

A1∧ . . .∧An⇒ A (Regula)true⇒ B (Axioma)

I Absent,a negat,iilor explicite — desprinderea falsitat,iipe baza imposibilitat,ii de a demonstra

I Ipoteza lumii închise (closed world assumption):ceea ce nu poate fi demonstrat este fals

I Prin opozit,ie, ipoteza lumii deschise (open worldassumption): nu se poate afirma nimic despre ceeace nu poate fi demonstrat

332 / 423

Page 896: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Negat,ia ca es, ec

1 nott(P) :- P, !, fail.2 nott(P).

I P → atom — exemplu: boy(john)

I P satisfiabil:I es, ecul primei reguli, din cauza lui failI abandonarea celei de-a doua reguli, din cauza lui !I rezultat: nott(P) nesatisfiabil

I P nesatisfiabil:I es, ecul primei reguliI succesul celei de-a doua reguliI rezultat: nott(P) satisfiabil

333 / 423

Page 897: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Rezumat

I Date: clauze Horn

I Regula de inferent,a: rezolut,ie

I Strategia de cautare: backward chaining,dinspre concluzie spre ipoteze

I Posibilitat,i generative, pe baza unui anumit stilde scriere a regulilor

334 / 423

Page 898: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Partea XII

Logica propozit,ionalas, i logica cu predicate de ordinul I

335 / 423

Page 899: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Introducere

Logica propozit,ionalaSintaxa s, i semanticaSatisfiabilitate s, i validitateDerivabilitateInferent,a s, i demonstrat,ieRezolut,ie

Logica cu predicate de ordinul ISintaxa s, i semanticaForma clauzalaUnificare

336 / 423

Page 900: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Introducere

Logica propozit,ionalaSintaxa s, i semanticaSatisfiabilitate s, i validitateDerivabilitateInferent,a s, i demonstrat,ieRezolut,ie

Logica cu predicate de ordinul ISintaxa s, i semanticaForma clauzalaUnificare

337 / 423

Page 901: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Logica

I Scop: reducerea efectuarii de rat,ionamente la calcul

I Problemele de decidabilitate din logica: stimulentpentru dezvoltarea modelelor de calculabilitate

I Împrumuturi reciproce între domeniile logiciis, i calculabilitat,ii:

I proiectarea s, i verificarea programelor → logicaI principiile logice → proiectarea limbajelor

de programare

(Harrison, 2009)

338 / 423

Page 902: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Logica

I Scop: reducerea efectuarii de rat,ionamente la calcul

I Problemele de decidabilitate din logica: stimulentpentru dezvoltarea modelelor de calculabilitate

I Împrumuturi reciproce între domeniile logiciis, i calculabilitat,ii:

I proiectarea s, i verificarea programelor → logicaI principiile logice → proiectarea limbajelor

de programare

(Harrison, 2009)

338 / 423

Page 903: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Logica

I Scop: reducerea efectuarii de rat,ionamente la calcul

I Problemele de decidabilitate din logica: stimulentpentru dezvoltarea modelelor de calculabilitate

I Împrumuturi reciproce între domeniile logiciis, i calculabilitat,ii:

I proiectarea s, i verificarea programelor → logicaI principiile logice → proiectarea limbajelor

de programare

(Harrison, 2009)

338 / 423

Page 904: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Logica

I Scop: reducerea efectuarii de rat,ionamente la calcul

I Problemele de decidabilitate din logica: stimulentpentru dezvoltarea modelelor de calculabilitate

I Împrumuturi reciproce între domeniile logiciis, i calculabilitat,ii:

I proiectarea s, i verificarea programelor → logica

I principiile logice → proiectarea limbajelorde programare

(Harrison, 2009)

338 / 423

Page 905: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Logica

I Scop: reducerea efectuarii de rat,ionamente la calcul

I Problemele de decidabilitate din logica: stimulentpentru dezvoltarea modelelor de calculabilitate

I Împrumuturi reciproce între domeniile logiciis, i calculabilitat,ii:

I proiectarea s, i verificarea programelor → logicaI principiile logice → proiectarea limbajelor

de programare

(Harrison, 2009)

338 / 423

Page 906: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Rolurile logicii

I Descrierea proprietat,ilor obiectelor, într-o manieraneambigua, prin intermediul unui limbaj,cu urmatoarele componente:

I sintaxa: modalitatea de construct,ie a expresiilorI semantica: semnificat,ia expresiilor construite

I Deducerea de noi proprietat,i, pe baza celor existente

339 / 423

Page 907: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Rolurile logicii

I Descrierea proprietat,ilor obiectelor, într-o manieraneambigua, prin intermediul unui limbaj,cu urmatoarele componente:

I sintaxa: modalitatea de construct,ie a expresiilor

I semantica: semnificat,ia expresiilor construite

I Deducerea de noi proprietat,i, pe baza celor existente

339 / 423

Page 908: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Rolurile logicii

I Descrierea proprietat,ilor obiectelor, într-o manieraneambigua, prin intermediul unui limbaj,cu urmatoarele componente:

I sintaxa: modalitatea de construct,ie a expresiilorI semantica: semnificat,ia expresiilor construite

I Deducerea de noi proprietat,i, pe baza celor existente

339 / 423

Page 909: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Rolurile logicii

I Descrierea proprietat,ilor obiectelor, într-o manieraneambigua, prin intermediul unui limbaj,cu urmatoarele componente:

I sintaxa: modalitatea de construct,ie a expresiilorI semantica: semnificat,ia expresiilor construite

I Deducerea de noi proprietat,i, pe baza celor existente

339 / 423

Page 910: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Introducere

Logica propozit,ionalaSintaxa s, i semanticaSatisfiabilitate s, i validitateDerivabilitateInferent,a s, i demonstrat,ieRezolut,ie

Logica cu predicate de ordinul ISintaxa s, i semanticaForma clauzalaUnificare

340 / 423

Page 911: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Logica propozit,ionala

I Expresia din limbaj: propozit,ia, corespunzatoareunei afirmat,ii, ce poate fi adevarata sau falsa

I Exemplu: “Telefonul suna s, i câinele latra.”

I Accept,ii asupra unei propozit,ii:

I secvent,a de simboluri utilizate sauI înt,elesul propriu-zis al acesteia, într-o interpretare

I Valoarea de adevar a unei propozit,ii — determinatade valorile de adevar ale propozit,iilor constituente

(Genesereth, 2010)

341 / 423

Page 912: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Logica propozit,ionala

I Expresia din limbaj: propozit,ia, corespunzatoareunei afirmat,ii, ce poate fi adevarata sau falsa

I Exemplu: “Telefonul suna s, i câinele latra.”

I Accept,ii asupra unei propozit,ii:

I secvent,a de simboluri utilizate sauI înt,elesul propriu-zis al acesteia, într-o interpretare

I Valoarea de adevar a unei propozit,ii — determinatade valorile de adevar ale propozit,iilor constituente

(Genesereth, 2010)

341 / 423

Page 913: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Logica propozit,ionala

I Expresia din limbaj: propozit,ia, corespunzatoareunei afirmat,ii, ce poate fi adevarata sau falsa

I Exemplu: “Telefonul suna s, i câinele latra.”

I Accept,ii asupra unei propozit,ii:

I secvent,a de simboluri utilizate sauI înt,elesul propriu-zis al acesteia, într-o interpretare

I Valoarea de adevar a unei propozit,ii — determinatade valorile de adevar ale propozit,iilor constituente

(Genesereth, 2010)

341 / 423

Page 914: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Logica propozit,ionala

I Expresia din limbaj: propozit,ia, corespunzatoareunei afirmat,ii, ce poate fi adevarata sau falsa

I Exemplu: “Telefonul suna s, i câinele latra.”

I Accept,ii asupra unei propozit,ii:I secvent,a de simboluri utilizate sau

I înt,elesul propriu-zis al acesteia, într-o interpretare

I Valoarea de adevar a unei propozit,ii — determinatade valorile de adevar ale propozit,iilor constituente

(Genesereth, 2010)

341 / 423

Page 915: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Logica propozit,ionala

I Expresia din limbaj: propozit,ia, corespunzatoareunei afirmat,ii, ce poate fi adevarata sau falsa

I Exemplu: “Telefonul suna s, i câinele latra.”

I Accept,ii asupra unei propozit,ii:I secvent,a de simboluri utilizate sauI înt,elesul propriu-zis al acesteia, într-o interpretare

I Valoarea de adevar a unei propozit,ii — determinatade valorile de adevar ale propozit,iilor constituente

(Genesereth, 2010)

341 / 423

Page 916: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Logica propozit,ionala

I Expresia din limbaj: propozit,ia, corespunzatoareunei afirmat,ii, ce poate fi adevarata sau falsa

I Exemplu: “Telefonul suna s, i câinele latra.”

I Accept,ii asupra unei propozit,ii:I secvent,a de simboluri utilizate sauI înt,elesul propriu-zis al acesteia, într-o interpretare

I Valoarea de adevar a unei propozit,ii — determinatade valorile de adevar ale propozit,iilor constituente

(Genesereth, 2010)

341 / 423

Page 917: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Introducere

Logica propozit,ionalaSintaxa s, i semanticaSatisfiabilitate s, i validitateDerivabilitateInferent,a s, i demonstrat,ieRezolut,ie

Logica cu predicate de ordinul ISintaxa s, i semanticaForma clauzalaUnificare

342 / 423

Page 918: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Sintaxa

I 2 categorii de propozit,iiI simple: fapte atomice:

“Telefonul suna.”, “Câinele latra.”I compuse: relat,ii între propozit,ii mai simple:

“Telefonul suna s, i câinele latra.”

I Propozit,ii simple: p,q, r , . . .

I Negat,ii: ¬α

I Conjunct,ii: (α ∧β )

I Disjunct,ii: (α ∨β )

I Implicat,ii: (α ⇒ β )

I Echivalent,e: (α ⇔ β )

343 / 423

Page 919: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Sintaxa

I 2 categorii de propozit,iiI simple: fapte atomice:

“Telefonul suna.”, “Câinele latra.”I compuse: relat,ii între propozit,ii mai simple:

“Telefonul suna s, i câinele latra.”

I Propozit,ii simple: p,q, r , . . .

I Negat,ii: ¬α

I Conjunct,ii: (α ∧β )

I Disjunct,ii: (α ∨β )

I Implicat,ii: (α ⇒ β )

I Echivalent,e: (α ⇔ β )

343 / 423

Page 920: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Semantica I

I Atribuirea de valori de adevar propozit,iilor

I Accent pe relat,iile dintre propozit,iile compuses, i cele constituente

I Pentru explicitarea legaturilor, utilizarea conceptuluide interpretare

344 / 423

Page 921: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Semantica II

I Interpretare = mult,ime de asocieri între fiecarepropozit,ie simpla din limbaj s, i o valoare de adevar

I Exemplu:

Interpretarea I:I pI = false

I qI = true

I r I = false

Interpretarea J:I pJ = true

I qJ = true

I r J = true

I Sub o interpretare fixata, dependent,a valorii deadevar a unei propozit,ii compuse de valorile deadevar ale celor constituente

345 / 423

Page 922: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Semantica III

I Negat,ie:

(¬α)I =

{true daca α I = falsefalse altfel

I Conjunct,ie:

(α ∧β )I =

{true daca α I = true s, i β I = truefalse altfel

I Disjunct,ie:

(α ∨β )I =

{false daca α I = false s, i β I = falsetrue altfel

346 / 423

Page 923: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Semantica IV

I Implicat,ie:

(α ⇒ β )I =

{false daca α I = true s, i β I = falsetrue altfel

I Echivalent,a:

(α ⇔ β )I =

{true daca α I = β I

false altfel

347 / 423

Page 924: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Evaluare

I Evaluare = determinarea valorii de adevar a uneipropozit,ii, sub o interpretare, prin aplicarea regulilorsemantice anterioare

I Exemplu:

Interpretarea I:I pI = false

I qI = true

I r I = false

Propozit,ia: φ = (p∧q)∨ (q⇒ r )

φI = (false∧ true)∨ (true⇒ false)

= false∨ false= false

348 / 423

Page 925: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Introducere

Logica propozit,ionalaSintaxa s, i semanticaSatisfiabilitate s, i validitateDerivabilitateInferent,a s, i demonstrat,ieRezolut,ie

Logica cu predicate de ordinul ISintaxa s, i semanticaForma clauzalaUnificare

349 / 423

Page 926: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Satisfiabilitate

I Satisfiabilitate = proprietatea unei propozit,iiadevarate în cel put,in o interpretare

I Metoda tabelei de adevar:

p q r (p∧q)∨ (q⇒ r )

true true true truetrue true false truetrue false true truetrue false false truefalse true true truefalse true false falsefalse false true falsefalse false false false

350 / 423

Page 927: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Validitate

I Validitate = proprietatea unei propozit,ii adevarateîn toate interpretarile (tautologie)

I Exemplu: p∨¬p

I Verificabila prin metoda tabelei de adevar

351 / 423

Page 928: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Nesatisfiabilitate

I Nesatisfiabilitate = proprietatea unei propozit,ii falseîn toate interpretarile (contradict,ie)

I Exemplu: p⇔¬p

I Verificabila prin metoda tabelei de adevar

352 / 423

Page 929: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Introducere

Logica propozit,ionalaSintaxa s, i semanticaSatisfiabilitate s, i validitateDerivabilitateInferent,a s, i demonstrat,ieRezolut,ie

Logica cu predicate de ordinul ISintaxa s, i semanticaForma clauzalaUnificare

353 / 423

Page 930: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Derivabilitate II Derivabilitate logica = proprietatea unei propozit,ii

de a reprezenta consecint,a logica a unei mult,imide alte propozit,ii, numite premise

I Mult,imea de propozit,ii ∆ deriva propozit,ia φ , daca s, inumai daca orice interpretare care satisface toatepropozit,iile din ∆ satisface s, i φ :

∆ |= φ

I Exemple:I {p} |= p∨qI {p,q} |= p∧qI {p} 6|= p∧qI {p,p⇒ q} |= q

354 / 423

Page 931: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Derivabilitate II

I Verificabila prin metoda tabelei de adevar: toateintrarile pentru care premisele sunt adevarate trebuiesa induca adevarul concluziei

I Exemplu: demonstram ca {p,p⇒ q} |= q.

p q p⇒ qtrue true truetrue false falsefalse true truefalse false true

Singura intrare în care ambele premise, p s, i p⇒ q,sunt adevarate, precizeaza s, i adevarul concluziei, q.

355 / 423

Page 932: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Formulari echivalente ale derivabilitat,ii

I {φ1, . . . ,φn} |= φ

I Propozit,ia φ1∧ . . .∧φn⇒ φ este

valida

I Propozit,ia φ1∧ . . .∧φn∧¬φ este nesatisfiabila

356 / 423

Page 933: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Formulari echivalente ale derivabilitat,ii

I {φ1, . . . ,φn} |= φ

I Propozit,ia φ1∧ . . .∧φn⇒ φ este valida

I Propozit,ia φ1∧ . . .∧φn∧¬φ este

nesatisfiabila

356 / 423

Page 934: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Formulari echivalente ale derivabilitat,ii

I {φ1, . . . ,φn} |= φ

I Propozit,ia φ1∧ . . .∧φn⇒ φ este valida

I Propozit,ia φ1∧ . . .∧φn∧¬φ este nesatisfiabila

356 / 423

Page 935: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Introducere

Logica propozit,ionalaSintaxa s, i semanticaSatisfiabilitate s, i validitateDerivabilitateInferent,a s, i demonstrat,ieRezolut,ie

Logica cu predicate de ordinul ISintaxa s, i semanticaForma clauzalaUnificare

357 / 423

Page 936: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Motivat,ie

I Derivabilitate logica: proprietate a propozit,iilor

I Derivare mecanica (inferent,a): demers de calcul,în scopul verificarii derivabilitat,ii logice

I Cres, terea exponent,iala a numarului de interpretariîn raport cu numarul de propozit,ii simple

I De aici, diminuarea valorii practice a metodelorsemantice, precum cea a tabelei de adevar

I Alternativ, metode sintactice, care manipuleazadoar reprezentarea simbolica

358 / 423

Page 937: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Motivat,ie

I Derivabilitate logica: proprietate a propozit,iilor

I Derivare mecanica (inferent,a): demers de calcul,în scopul verificarii derivabilitat,ii logice

I Cres, terea exponent,iala a numarului de interpretariîn raport cu numarul de propozit,ii simple

I De aici, diminuarea valorii practice a metodelorsemantice, precum cea a tabelei de adevar

I Alternativ, metode sintactice, care manipuleazadoar reprezentarea simbolica

358 / 423

Page 938: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Motivat,ie

I Derivabilitate logica: proprietate a propozit,iilor

I Derivare mecanica (inferent,a): demers de calcul,în scopul verificarii derivabilitat,ii logice

I Cres, terea exponent,iala a numarului de interpretariîn raport cu numarul de propozit,ii simple

I De aici, diminuarea valorii practice a metodelorsemantice, precum cea a tabelei de adevar

I Alternativ, metode sintactice, care manipuleazadoar reprezentarea simbolica

358 / 423

Page 939: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Motivat,ie

I Derivabilitate logica: proprietate a propozit,iilor

I Derivare mecanica (inferent,a): demers de calcul,în scopul verificarii derivabilitat,ii logice

I Cres, terea exponent,iala a numarului de interpretariîn raport cu numarul de propozit,ii simple

I De aici, diminuarea valorii practice a metodelorsemantice, precum cea a tabelei de adevar

I Alternativ, metode sintactice, care manipuleazadoar reprezentarea simbolica

358 / 423

Page 940: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Motivat,ie

I Derivabilitate logica: proprietate a propozit,iilor

I Derivare mecanica (inferent,a): demers de calcul,în scopul verificarii derivabilitat,ii logice

I Cres, terea exponent,iala a numarului de interpretariîn raport cu numarul de propozit,ii simple

I De aici, diminuarea valorii practice a metodelorsemantice, precum cea a tabelei de adevar

I Alternativ, metode sintactice, care manipuleazadoar reprezentarea simbolica

358 / 423

Page 941: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Inferent,a

I Inferent,a = derivarea mecanica a concluziilorunei mult,imi de premise

I Regula de inferent,a = procedura de calcul capabilasa deriveze concluziile unei mult,imi de premise

I Derivabilitatea mecanica a concluziei φ din mult,imeade premise ∆, utilizând regula de inferent,a inf :

∆ `inf φ

359 / 423

Page 942: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Inferent,a

I Inferent,a = derivarea mecanica a concluziilorunei mult,imi de premise

I Regula de inferent,a = procedura de calcul capabilasa deriveze concluziile unei mult,imi de premise

I Derivabilitatea mecanica a concluziei φ din mult,imeade premise ∆, utilizând regula de inferent,a inf :

∆ `inf φ

359 / 423

Page 943: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Inferent,a

I Inferent,a = derivarea mecanica a concluziilorunei mult,imi de premise

I Regula de inferent,a = procedura de calcul capabilasa deriveze concluziile unei mult,imi de premise

I Derivabilitatea mecanica a concluziei φ din mult,imeade premise ∆, utilizând regula de inferent,a inf :

∆ `inf φ

359 / 423

Page 944: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Reguli de inferent,a

I S, abloane parametrizate de rat,ionament, formatedintr-o mult,ime de premise s, i o mult,ime de concluzii

I Modus Ponens (MP):

α ⇒ β

α

β

I Modus Tollens:α ⇒ β

¬β

¬α

360 / 423

Page 945: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Reguli de inferent,a

I S, abloane parametrizate de rat,ionament, formatedintr-o mult,ime de premise s, i o mult,ime de concluzii

I Modus Ponens (MP):

α ⇒ β

α

β

I Modus Tollens:α ⇒ β

¬β

¬α

360 / 423

Page 946: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Reguli de inferent,a

I S, abloane parametrizate de rat,ionament, formatedintr-o mult,ime de premise s, i o mult,ime de concluzii

I Modus Ponens (MP):

α ⇒ β

α

β

I Modus Tollens:α ⇒ β

¬β

¬α

360 / 423

Page 947: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Proprietat,i ale regulilor de inferent,a

I Consistent,a (soundness): regula de inferent,adetermina doar propozit,ii care sunt, într-adevar,consecint,e logice ale premiselor:

∆ `inf φ ⇒∆ |= φ

I Completitudine (completeness): regula de inferent,adetermina toate consecint,ele logice ale premiselor:

∆ |= φ ⇒∆ `inf φ

I Ideal, ambele proprietat,i: “nici în plus, nici în minus”

I Incompletitudinea regulii Modus Ponens, dinimposibilitatea scrierii oricarei propozit,ii ca implicat,ie

361 / 423

Page 948: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Proprietat,i ale regulilor de inferent,a

I Consistent,a (soundness): regula de inferent,adetermina doar propozit,ii care sunt, într-adevar,consecint,e logice ale premiselor:

∆ `inf φ ⇒∆ |= φ

I Completitudine (completeness): regula de inferent,adetermina toate consecint,ele logice ale premiselor:

∆ |= φ ⇒∆ `inf φ

I Ideal, ambele proprietat,i: “nici în plus, nici în minus”

I Incompletitudinea regulii Modus Ponens, dinimposibilitatea scrierii oricarei propozit,ii ca implicat,ie

361 / 423

Page 949: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Proprietat,i ale regulilor de inferent,a

I Consistent,a (soundness): regula de inferent,adetermina doar propozit,ii care sunt, într-adevar,consecint,e logice ale premiselor:

∆ `inf φ ⇒∆ |= φ

I Completitudine (completeness): regula de inferent,adetermina toate consecint,ele logice ale premiselor:

∆ |= φ ⇒∆ `inf φ

I Ideal, ambele proprietat,i: “nici în plus, nici în minus”

I Incompletitudinea regulii Modus Ponens, dinimposibilitatea scrierii oricarei propozit,ii ca implicat,ie

361 / 423

Page 950: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Proprietat,i ale regulilor de inferent,a

I Consistent,a (soundness): regula de inferent,adetermina doar propozit,ii care sunt, într-adevar,consecint,e logice ale premiselor:

∆ `inf φ ⇒∆ |= φ

I Completitudine (completeness): regula de inferent,adetermina toate consecint,ele logice ale premiselor:

∆ |= φ ⇒∆ `inf φ

I Ideal, ambele proprietat,i: “nici în plus, nici în minus”

I Incompletitudinea regulii Modus Ponens, dinimposibilitatea scrierii oricarei propozit,ii ca implicat,ie

361 / 423

Page 951: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

AxiomeI Exemplu: verificarea ca {p⇒ q,q⇒ r} |= p⇒ r

I Caz în care premisele sunt insuficientepentru aplicarea regulilor de inferent,a

I Solut,ia: adaugarea de axiome, reguli de inferent,afara premise

I Introducerea implicat,iei (II):

α ⇒ (β ⇒ α)

I Distribuirea implicat,iei (DI):

(α ⇒ (β ⇒ γ))⇒ ((α ⇒ β )⇒ (α ⇒ γ))

362 / 423

Page 952: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

AxiomeI Exemplu: verificarea ca {p⇒ q,q⇒ r} |= p⇒ r

I Caz în care premisele sunt insuficientepentru aplicarea regulilor de inferent,a

I Solut,ia: adaugarea de axiome, reguli de inferent,afara premise

I Introducerea implicat,iei (II):

α ⇒ (β ⇒ α)

I Distribuirea implicat,iei (DI):

(α ⇒ (β ⇒ γ))⇒ ((α ⇒ β )⇒ (α ⇒ γ))

362 / 423

Page 953: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

AxiomeI Exemplu: verificarea ca {p⇒ q,q⇒ r} |= p⇒ r

I Caz în care premisele sunt insuficientepentru aplicarea regulilor de inferent,a

I Solut,ia: adaugarea de axiome, reguli de inferent,afara premise

I Introducerea implicat,iei (II):

α ⇒ (β ⇒ α)

I Distribuirea implicat,iei (DI):

(α ⇒ (β ⇒ γ))⇒ ((α ⇒ β )⇒ (α ⇒ γ))

362 / 423

Page 954: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

AxiomeI Exemplu: verificarea ca {p⇒ q,q⇒ r} |= p⇒ r

I Caz în care premisele sunt insuficientepentru aplicarea regulilor de inferent,a

I Solut,ia: adaugarea de axiome, reguli de inferent,afara premise

I Introducerea implicat,iei (II):

α ⇒ (β ⇒ α)

I Distribuirea implicat,iei (DI):

(α ⇒ (β ⇒ γ))⇒ ((α ⇒ β )⇒ (α ⇒ γ))

362 / 423

Page 955: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

AxiomeI Exemplu: verificarea ca {p⇒ q,q⇒ r} |= p⇒ r

I Caz în care premisele sunt insuficientepentru aplicarea regulilor de inferent,a

I Solut,ia: adaugarea de axiome, reguli de inferent,afara premise

I Introducerea implicat,iei (II):

α ⇒ (β ⇒ α)

I Distribuirea implicat,iei (DI):

(α ⇒ (β ⇒ γ))⇒ ((α ⇒ β )⇒ (α ⇒ γ))

362 / 423

Page 956: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Demonstrat,ii I

I Demonstrat,ie = secvent,a de propozit,ii,finalizata cu o concluzie, s, i cont,inând:

I premiseI instant,e ale axiomelorI rezultate ale aplicarii regulilor de inferent,a

asupra elementelor precedente din secvent,a

I Teorema = concluzia cu care se încheieo demonstrat,ie

363 / 423

Page 957: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Demonstrat,ii II

I Procedura de demonstrare = mecanismde demonstrare, constând din:

I o mult,ime de reguli de inferent,a

I o strategie de control, ce dicteaza ordinea aplicariiregulilor

364 / 423

Page 958: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Demonstrat,ii III

Exemplu: demonstram ca {p⇒ q,q⇒ r} ` p⇒ r .

1 p⇒ q Premisa2 q⇒ r Premisa3 (q⇒ r )⇒ (p⇒ (q⇒ r )) II4 p⇒ (q⇒ r ) MP 3, 25 (p⇒ (q⇒ r ))⇒ ((p⇒ q)⇒ (p⇒ r )) DI6 (p⇒ q)⇒ (p⇒ r ) MP 5, 47 p⇒ r MP 6, 1

365 / 423

Page 959: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Demonstrat,ii IV

Rezultat: existent,a unui sistem de inferent,aconsistent s, i complet, bazat pe:

I axiomele de mai devreme, îmbogat,ite cu alteleI regula de inferent,a Modus Ponens

∆ |= φ ⇔∆ ` φ

366 / 423

Page 960: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Introducere

Logica propozit,ionalaSintaxa s, i semanticaSatisfiabilitate s, i validitateDerivabilitateInferent,a s, i demonstrat,ieRezolut,ie

Logica cu predicate de ordinul ISintaxa s, i semanticaForma clauzalaUnificare

367 / 423

Page 961: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Rezolut,ie

I Regula de inferent,a foarte puternica

I Baza unui demonstrator de teoremeconsistent s, i complet

I Spat,iul de cautare mult mai mic ca în abordareastandard (v. subsect,iunea anterioara)

I Lucrul cu propozit,ii în forma clauzala

368 / 423

Page 962: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Rezolut,ie

I Regula de inferent,a foarte puternica

I Baza unui demonstrator de teoremeconsistent s, i complet

I Spat,iul de cautare mult mai mic ca în abordareastandard (v. subsect,iunea anterioara)

I Lucrul cu propozit,ii în forma clauzala

368 / 423

Page 963: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Rezolut,ie

I Regula de inferent,a foarte puternica

I Baza unui demonstrator de teoremeconsistent s, i complet

I Spat,iul de cautare mult mai mic ca în abordareastandard (v. subsect,iunea anterioara)

I Lucrul cu propozit,ii în forma clauzala

368 / 423

Page 964: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Rezolut,ie

I Regula de inferent,a foarte puternica

I Baza unui demonstrator de teoremeconsistent s, i complet

I Spat,iul de cautare mult mai mic ca în abordareastandard (v. subsect,iunea anterioara)

I Lucrul cu propozit,ii în forma clauzala

368 / 423

Page 965: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Forma clauzala I

I Literal = propozit,ie simpla (p) sau negat,ia ei (¬p)

I Expresie clauzala = literal sau disjunct,ie de literali,e.g. p∨¬q∨ r ∨p

I Clauza = mult,ime de literali dintr-o expresie clauzala,e.g. {p,¬q, r}

369 / 423

Page 966: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Forma clauzala II

I Forma clauzala (forma normala conjunctiva, FNC) =reprezentarea unei propozit,ii sub forma unei mult,imide clauze, implicit legate prin conjunct,ii

I Exemplu: forma clauzala a propozit,ieip∧ (¬q∨ r )∧ (¬p∨¬r ) este {{p},{¬q, r},{¬p,¬r}}.

I Posibilitatea convertirii oricarei propozit,ii în aceastaforma, prin algoritmul urmator

370 / 423

Page 967: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Transformarea în forma clauzala I1. Eliminarea implicat,iilor (I):

α ⇒ β → ¬α ∨β

2. Introducerea negat,iilor în paranteze (N):

¬(α ∧β ) → ¬α ∨¬β etc.

3. Distribuirea lui ∨ fat,a de ∧ (D):

α ∨ (β ∧ γ) → (α ∨β )∧ (α ∨ γ)

4. Transformarea expresiilor în clauze (C):

φ1∨ . . .∨φn → {φ1, . . . ,φn}φ1∧ . . .∧φn → {φ1}, . . . ,{φn}

371 / 423

Page 968: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Transformarea în forma clauzala II

I Exemplu: p∧ (q⇒ r )

I p∧ (¬q∨ r )

C {p},{¬q, r}

I Exemplu: ¬(p∧ (q⇒ r ))

I ¬(p∧ (¬q∨ r ))

N ¬p∨¬(¬q∨ r )

N ¬p∨ (q∧¬r )

D (¬p∨q)∧ (¬p∨¬r )

C {¬p,q},{¬p,¬r}

372 / 423

Page 969: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Rezolut,ie I

I Ideea:{p,q}{¬p, r}{q, r}

I “Anularea” lui p cu ¬p

I p adevarata, ¬p falsa, deci r adevarata

I p falsa, deci q adevarata

I Cel put,in una dintre q s, i r adevarata

I Forma generala:

{p1, . . . , r , . . . ,pm}{q1, . . . ,¬r , . . . ,qn}{p1, . . . ,pm,q1, . . . ,qn}

373 / 423

Page 970: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Rezolut,ie II

I Rezolvent vid — contradict,ie între premise:

{¬p}{p}{}

I Mai mult de 2 rezolvent,i posibili — se alege doar unul:

{p,q}{¬p,¬q}{p,¬p}{q,¬q}

374 / 423

Page 971: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Rezolut,ie IIII Modus Ponens — caz particular al rezolut,iei:

p⇒ qpq

{¬p,q}{p}{q}

I Modus Tollens — caz particular al rezolut,iei:

p⇒ q¬q¬p

{¬p,q}{¬q}{¬p}

I Tranzitivitatea implicat,iei:

p⇒ qq⇒ rp⇒ r

{¬p,q}{¬q, r}{¬p, r}

375 / 423

Page 972: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Rezolut,ie IV

I Demonstrarea nesatisfiabilitat,ii — derivarea clauzeivide

I Demonstrarea derivabilitat,ii concluziei φ dinpremisele φ1, . . . ,φn — demonstrarea nesatisfiabilitat,iipropozit,iei φ1∧ . . .∧φn∧¬φ (reducere la absurd)

I Demonstrarea validitat,ii propozit,iei φ —demonstrarea nesatisfiabilitat,ii propozit,iei ¬φ

I Rezolut,ia incompleta generativ, i.e. concluziile nu potfi derivate direct, raspunsul fiind dat în raportcu o “întrebare” fixata

376 / 423

Page 973: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Rezolut,ie V

Demonstram prin reducere la absurd ca{p⇒ q,q⇒ r} ` p⇒ r , i.e. ca mult,imea{p⇒ q,q⇒ r ,¬(p⇒ r )} cont,ine o contradict,ie.

1 {¬p,q} Premisa2 {¬q, r} Premisa3 {p} Concluzie negata4 {¬r} Concluzie negata5 {q} 1, 36 {r} 2, 57 {} 4, 6

377 / 423

Page 974: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Rezolut,ie VI

I Teorema rezolut,iei: rezolut,ia propozit,ionala esteconsistenta s, i completa (nu generativ, v. slide-ul 368):

∆ |= φ ⇔∆ ` φ

I Terminarea garantata a procedurii de aplicarea rezolut,iei: numar finit de clauze, numar finitde concluzii

378 / 423

Page 975: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Introducere

Logica propozit,ionalaSintaxa s, i semanticaSatisfiabilitate s, i validitateDerivabilitateInferent,a s, i demonstrat,ieRezolut,ie

Logica cu predicate de ordinul ISintaxa s, i semanticaForma clauzalaUnificare

379 / 423

Page 976: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Logica cu predicate de ordinul II Logica propozit,ionala:

I p: “Andrei este prieten cu Bogdan.”I q: “Bogdan este prieten cu Andrei.”I p⇔ qI Opacitate în raport cu obiectele s, i relat,iile referite

I First-order logic (FOL) = extensie a logiciipropozit,ionale, cu explicitarea:

I obiectelor din universul problemeiI relat,iilor dintre acestea

I FOL:I Generalizare: prieten(x ,y): “x este prieten cu y .”I ∀x .∀y .(prieten(x ,y)⇔ prieten(y ,x))I Aplicare pe cazuri particulareI Transparent,a în raport cu obiectele s, i relat,iile referite

(Genesereth, 2010)380 / 423

Page 977: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Logica cu predicate de ordinul II Logica propozit,ionala:

I p: “Andrei este prieten cu Bogdan.”I q: “Bogdan este prieten cu Andrei.”I p⇔ qI Opacitate în raport cu obiectele s, i relat,iile referite

I First-order logic (FOL) = extensie a logiciipropozit,ionale, cu explicitarea:

I obiectelor din universul problemeiI relat,iilor dintre acestea

I FOL:I Generalizare: prieten(x ,y): “x este prieten cu y .”I ∀x .∀y .(prieten(x ,y)⇔ prieten(y ,x))I Aplicare pe cazuri particulareI Transparent,a în raport cu obiectele s, i relat,iile referite

(Genesereth, 2010)380 / 423

Page 978: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Logica cu predicate de ordinul II Logica propozit,ionala:

I p: “Andrei este prieten cu Bogdan.”I q: “Bogdan este prieten cu Andrei.”I p⇔ qI Opacitate în raport cu obiectele s, i relat,iile referite

I First-order logic (FOL) = extensie a logiciipropozit,ionale, cu explicitarea:

I obiectelor din universul problemeiI relat,iilor dintre acestea

I FOL:I Generalizare: prieten(x ,y): “x este prieten cu y .”I ∀x .∀y .(prieten(x ,y)⇔ prieten(y ,x))I Aplicare pe cazuri particulareI Transparent,a în raport cu obiectele s, i relat,iile referite

(Genesereth, 2010)380 / 423

Page 979: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Introducere

Logica propozit,ionalaSintaxa s, i semanticaSatisfiabilitate s, i validitateDerivabilitateInferent,a s, i demonstrat,ieRezolut,ie

Logica cu predicate de ordinul ISintaxa s, i semanticaForma clauzalaUnificare

381 / 423

Page 980: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

SintaxaSimboluri utilizate

I Constante: obiecte particulare din universuldiscursului: c, d , andrei , bogdan, . . .

I Variabile: obiecte generice: x , y , . . .

I Simboluri funct,ionale: succesor (x), +(x ,y), . . .

I Simboluri relat,ionale (predicate): relat,ii n-arepeste obiectele din universul discursului: divide(x ,y),impar (x), . . .

I Conectori logici: ¬, ∧, . . .

I Cuantificatori: ∀, ∃

382 / 423

Page 981: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Sintaxa ITermeni, atomi, propozit,ii

I Termeni (obiecte):I Constante

I Variabile

I Aplicat,ii de funct,ii: f (t1, . . . , tn), unde f este un simbolfunct,ional n-ar s, i t1, . . . , tn sunt termeni. Exemple:

I succesor (4): succesorul lui 4

I +(2,x): suma simbolurilor 2 s, i x

383 / 423

Page 982: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Sintaxa IITermeni, atomi, propozit,ii

I Atomi (relat,ii): p(t1, . . . , tn), unde p este un predicatn-ar s, i t1, . . . , tn sunt termeni. Exemple:

I impar (3)

I varsta(ion,20)

I = (+(2,3),5)

I Propozit,ii (fapte) — x variabila, A atom, α propozit,ie:I Fals, adevarat: ⊥, >I Atomi: AI Negat,ii: ¬α

I . . .I Cuantificari: ∀x .α, ∃x .α

384 / 423

Page 983: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Sintaxa IIITermeni, atomi, propozit,ii

Exemplu: “Dan este prieten cu sora Ioanei”:

prieten( dan︸︷︷︸termen

,sora(

termen︷ ︸︸ ︷ioana)︸ ︷︷ ︸

termen

)

︸ ︷︷ ︸atom/propozit,ie

I Simplificare: legarea tuturor variabilelor,prin cuantificatori universali sau existent,iali

I Zona de act,iune a unui cuantificator: restul propozit,iei(v. simbolul λ în calculul lambda)

385 / 423

Page 984: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Semantica I

O interpretare consta din:

I Un domeniu nevid, D

I Pentru fiecare constanta c, un element cI ∈D

I Pentru fiecare simbol funct,ional n-ar, f , o funct,ief I : Dn→D

I Pentru fiecare predicat n-ar, p, o funct,iepI : Dn→{false, true}.

386 / 423

Page 985: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Semantica III Atom:

(p(t1, . . . , tn))I = pI(t I1, . . . , t

In)

I Negat,ie etc. (v. logica propozit,ionala)

I Cuantificare universala:

(∀x .α)I =

{false daca exista d ∈D cu α I

[d/x ] = falsetrue altfel

I Cuantificare existent,iala:

(∃x .α)I =

{true daca exista d ∈D cu α I

[d/x ] = truefalse altfel

387 / 423

Page 986: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemple

1. “Vrabia malai viseaza.”

∀x .(vrabie(x)⇒ viseaza(x ,malai))

2. “Unele vrabii viseaza malai.”

∃x .(vrabie(x)∧viseaza(x ,malai))

3. “Nu toate vrabiile viseaza malai.”

∃x .(vrabie(x)∧¬viseaza(x ,malai))

4. “Nicio vrabie nu viseaza malai.”

∀x .(vrabie(x)⇒¬viseaza(x ,malai))

5. “Numai vrabiile viseaza malai.”

∀x .(viseaza(x ,malai)⇒ vrabie(x))

6. “Toate s, i numai vrabiile viseaza malai.”

∀x .(viseaza(x ,malai)⇔ vrabie(x))

388 / 423

Page 987: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemple

1. “Vrabia malai viseaza.”∀x .(vrabie(x)⇒ viseaza(x ,malai))

2. “Unele vrabii viseaza malai.”

∃x .(vrabie(x)∧viseaza(x ,malai))

3. “Nu toate vrabiile viseaza malai.”

∃x .(vrabie(x)∧¬viseaza(x ,malai))

4. “Nicio vrabie nu viseaza malai.”

∀x .(vrabie(x)⇒¬viseaza(x ,malai))

5. “Numai vrabiile viseaza malai.”

∀x .(viseaza(x ,malai)⇒ vrabie(x))

6. “Toate s, i numai vrabiile viseaza malai.”

∀x .(viseaza(x ,malai)⇔ vrabie(x))

388 / 423

Page 988: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemple

1. “Vrabia malai viseaza.”∀x .(vrabie(x)⇒ viseaza(x ,malai))

2. “Unele vrabii viseaza malai.”

∃x .(vrabie(x)∧viseaza(x ,malai))

3. “Nu toate vrabiile viseaza malai.”

∃x .(vrabie(x)∧¬viseaza(x ,malai))

4. “Nicio vrabie nu viseaza malai.”

∀x .(vrabie(x)⇒¬viseaza(x ,malai))

5. “Numai vrabiile viseaza malai.”

∀x .(viseaza(x ,malai)⇒ vrabie(x))

6. “Toate s, i numai vrabiile viseaza malai.”

∀x .(viseaza(x ,malai)⇔ vrabie(x))

388 / 423

Page 989: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemple

1. “Vrabia malai viseaza.”∀x .(vrabie(x)⇒ viseaza(x ,malai))

2. “Unele vrabii viseaza malai.”∃x .(vrabie(x)∧viseaza(x ,malai))

3. “Nu toate vrabiile viseaza malai.”

∃x .(vrabie(x)∧¬viseaza(x ,malai))

4. “Nicio vrabie nu viseaza malai.”

∀x .(vrabie(x)⇒¬viseaza(x ,malai))

5. “Numai vrabiile viseaza malai.”

∀x .(viseaza(x ,malai)⇒ vrabie(x))

6. “Toate s, i numai vrabiile viseaza malai.”

∀x .(viseaza(x ,malai)⇔ vrabie(x))

388 / 423

Page 990: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemple

1. “Vrabia malai viseaza.”∀x .(vrabie(x)⇒ viseaza(x ,malai))

2. “Unele vrabii viseaza malai.”∃x .(vrabie(x)∧viseaza(x ,malai))

3. “Nu toate vrabiile viseaza malai.”

∃x .(vrabie(x)∧¬viseaza(x ,malai))

4. “Nicio vrabie nu viseaza malai.”

∀x .(vrabie(x)⇒¬viseaza(x ,malai))

5. “Numai vrabiile viseaza malai.”

∀x .(viseaza(x ,malai)⇒ vrabie(x))

6. “Toate s, i numai vrabiile viseaza malai.”

∀x .(viseaza(x ,malai)⇔ vrabie(x))

388 / 423

Page 991: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemple

1. “Vrabia malai viseaza.”∀x .(vrabie(x)⇒ viseaza(x ,malai))

2. “Unele vrabii viseaza malai.”∃x .(vrabie(x)∧viseaza(x ,malai))

3. “Nu toate vrabiile viseaza malai.”∃x .(vrabie(x)∧¬viseaza(x ,malai))

4. “Nicio vrabie nu viseaza malai.”

∀x .(vrabie(x)⇒¬viseaza(x ,malai))

5. “Numai vrabiile viseaza malai.”

∀x .(viseaza(x ,malai)⇒ vrabie(x))

6. “Toate s, i numai vrabiile viseaza malai.”

∀x .(viseaza(x ,malai)⇔ vrabie(x))

388 / 423

Page 992: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemple

1. “Vrabia malai viseaza.”∀x .(vrabie(x)⇒ viseaza(x ,malai))

2. “Unele vrabii viseaza malai.”∃x .(vrabie(x)∧viseaza(x ,malai))

3. “Nu toate vrabiile viseaza malai.”∃x .(vrabie(x)∧¬viseaza(x ,malai))

4. “Nicio vrabie nu viseaza malai.”

∀x .(vrabie(x)⇒¬viseaza(x ,malai))

5. “Numai vrabiile viseaza malai.”

∀x .(viseaza(x ,malai)⇒ vrabie(x))

6. “Toate s, i numai vrabiile viseaza malai.”

∀x .(viseaza(x ,malai)⇔ vrabie(x))

388 / 423

Page 993: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemple

1. “Vrabia malai viseaza.”∀x .(vrabie(x)⇒ viseaza(x ,malai))

2. “Unele vrabii viseaza malai.”∃x .(vrabie(x)∧viseaza(x ,malai))

3. “Nu toate vrabiile viseaza malai.”∃x .(vrabie(x)∧¬viseaza(x ,malai))

4. “Nicio vrabie nu viseaza malai.”∀x .(vrabie(x)⇒¬viseaza(x ,malai))

5. “Numai vrabiile viseaza malai.”

∀x .(viseaza(x ,malai)⇒ vrabie(x))

6. “Toate s, i numai vrabiile viseaza malai.”

∀x .(viseaza(x ,malai)⇔ vrabie(x))

388 / 423

Page 994: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemple

1. “Vrabia malai viseaza.”∀x .(vrabie(x)⇒ viseaza(x ,malai))

2. “Unele vrabii viseaza malai.”∃x .(vrabie(x)∧viseaza(x ,malai))

3. “Nu toate vrabiile viseaza malai.”∃x .(vrabie(x)∧¬viseaza(x ,malai))

4. “Nicio vrabie nu viseaza malai.”∀x .(vrabie(x)⇒¬viseaza(x ,malai))

5. “Numai vrabiile viseaza malai.”

∀x .(viseaza(x ,malai)⇒ vrabie(x))

6. “Toate s, i numai vrabiile viseaza malai.”

∀x .(viseaza(x ,malai)⇔ vrabie(x))

388 / 423

Page 995: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemple

1. “Vrabia malai viseaza.”∀x .(vrabie(x)⇒ viseaza(x ,malai))

2. “Unele vrabii viseaza malai.”∃x .(vrabie(x)∧viseaza(x ,malai))

3. “Nu toate vrabiile viseaza malai.”∃x .(vrabie(x)∧¬viseaza(x ,malai))

4. “Nicio vrabie nu viseaza malai.”∀x .(vrabie(x)⇒¬viseaza(x ,malai))

5. “Numai vrabiile viseaza malai.”∀x .(viseaza(x ,malai)⇒ vrabie(x))

6. “Toate s, i numai vrabiile viseaza malai.”

∀x .(viseaza(x ,malai)⇔ vrabie(x))

388 / 423

Page 996: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemple

1. “Vrabia malai viseaza.”∀x .(vrabie(x)⇒ viseaza(x ,malai))

2. “Unele vrabii viseaza malai.”∃x .(vrabie(x)∧viseaza(x ,malai))

3. “Nu toate vrabiile viseaza malai.”∃x .(vrabie(x)∧¬viseaza(x ,malai))

4. “Nicio vrabie nu viseaza malai.”∀x .(vrabie(x)⇒¬viseaza(x ,malai))

5. “Numai vrabiile viseaza malai.”∀x .(viseaza(x ,malai)⇒ vrabie(x))

6. “Toate s, i numai vrabiile viseaza malai.”

∀x .(viseaza(x ,malai)⇔ vrabie(x))

388 / 423

Page 997: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemple

1. “Vrabia malai viseaza.”∀x .(vrabie(x)⇒ viseaza(x ,malai))

2. “Unele vrabii viseaza malai.”∃x .(vrabie(x)∧viseaza(x ,malai))

3. “Nu toate vrabiile viseaza malai.”∃x .(vrabie(x)∧¬viseaza(x ,malai))

4. “Nicio vrabie nu viseaza malai.”∀x .(vrabie(x)⇒¬viseaza(x ,malai))

5. “Numai vrabiile viseaza malai.”∀x .(viseaza(x ,malai)⇒ vrabie(x))

6. “Toate s, i numai vrabiile viseaza malai.”∀x .(viseaza(x ,malai)⇔ vrabie(x))

388 / 423

Page 998: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

CuantificatoriGres, eli frecvente

I ∀x .(vrabie(x)⇒ viseaza(x ,malai))

→ corect: “Toate vrabiile viseaza malai.”

I ∀x .(vrabie(x)∧viseaza(x ,malai))

→ gres, it: “Tot,i sunt vrabii care viseaza malai.”

I ∃x .(vrabie(x)∧viseaza(x ,malai))

→ corect: “Unele vrabii viseaza malai.”

I ∃x .(vrabie(x)⇒ viseaza(x ,malai))

→ gres, it: adevarata s, i daca exista cineva carenu este vrabie

389 / 423

Page 999: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

CuantificatoriProprietat,i

I Necomutativitate:I ∀x .∃y .viseaza(x ,y): “Tot,i viseaza la ceva particular.”I ∃y .∀x .viseaza(x ,y): “Tot,i viseaza la acelas, i lucru.”

I Dualitate:I ¬(∀x .α)≡ ∃x .¬α

I ¬(∃x .α)≡ ∀x .¬α

390 / 423

Page 1000: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Aspecte legate de propozit,ii

Analoage logicii propozit,ionale:

I Satisfiabilitate

I Valididate

I Derivabilitate

I Inferent,a

I Demonstrat,ie

391 / 423

Page 1001: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Introducere

Logica propozit,ionalaSintaxa s, i semanticaSatisfiabilitate s, i validitateDerivabilitateInferent,a s, i demonstrat,ieRezolut,ie

Logica cu predicate de ordinul ISintaxa s, i semanticaForma clauzalaUnificare

392 / 423

Page 1002: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Forma clauzala

I Literal: atom (prieten(x ,y)) sau negat,ia lui(¬prieten(x ,y))

I Expresie clauzala = literal sau disjunct,ie de literali,e.g. prieten(x ,y)∨¬doctor (x)

I Clauza = mult,ime de literali dintr-o expresie clauzala,e.g. {prieten(x ,y),¬doctor (x)}

I Clauza Horn = clauza în care un singur literal esteîn forma pozitiva, e.g. {¬A1, . . . ,¬An,A},corespunzatoare implicat,iei A1∧ . . .∧An⇒ A

393 / 423

Page 1003: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Transformarea în forma clauzala I

1. Eliminarea implicat,iilor (I)

2. Introducerea negat,iilor în interiorul expresiilor (N)

3. Redenumirea variabilelor cuantificate pentruobt,inerea unicitat,ii de nume (R):

∀x .p(x)∧∀x .q(x)∨∃x .r (x) → ∀x .p(x)∧∀y .q(y)∨∃z.r (z)

4. Deplasarea cuantificatorilor la începutul expresiei,conservându-le ordinea (forma normala prenex) (P):

∀x .p(x)∧∀y .q(y)∨∃z.r (z) → ∀x .∀y .∃z.(p(x)∧q(y)∨r (z))

394 / 423

Page 1004: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Transformarea în forma clauzala II

5. Eliminarea cuantificatorilor existent,iali (skolemizare)(S):

I Daca nu este precedat de cuantificatori universali:înlocuirea aparit,iilor variabilei cuantificate printr-oconstanta:

∃x .p(x) → p(cx )

I Daca este precedat de cuantificatori universali:înlocuirea aparit,iilor variabilei cuantificate prinaplicat,ia unei funct,ii unice asupra variabilelor anteriorcuantificate universal:

∀x .∀y .∃z.(p(x)∧q(y)∨r (z)) → ∀x .∀y .(p(x)∧q(y)∨r (fz(x ,y)))

395 / 423

Page 1005: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Transformarea în forma clauzala III

6. Eliminarea cuantificatorilor universali, considerat,iacum implicit,i (U):

∀x .∀y .(p(x)∧q(y)∨r (fz(x ,y))) → p(x)∧q(y)∨r (fz(x ,y))

7. Distribuirea lui ∨ fat,a de ∧ (D):

α ∨ (β ∧ γ) → (α ∨β )∧ (α ∨ γ)

8. Transformarea expresiilor în clauze (C)

396 / 423

Page 1006: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Transformarea în forma clauzala IVExemplu: “Cine rezolva toate laboratoarele este apreciatde cineva.”

∀x .(∀y .(lab(y)⇒ rezolva(x ,y))⇒∃y .apreciaza(y ,x))

I ∀x .(¬∀y .(¬lab(y)∨ rezolva(x ,y))∨∃y .apreciaza(y ,x))

N ∀x .(∃y .¬(¬lab(y)∨ rezolva(x ,y))∨∃y .apreciaza(y ,x))

N ∀x .(∃y .(lab(y)∧¬rezolva(x ,y))∨∃y .apreciaza(y ,x))

R ∀x .(∃y .(lab(y)∧¬rezolva(x ,y))∨∃z.apreciaza(z,x))

P ∀x .∃y .∃z.((lab(y)∧¬rezolva(x ,y))∨apreciaza(z,x))

S ∀x .((lab(fy (x))∧¬rezolva(x , fy (x)))∨apreciaza(fz(x),x))

U (lab(fy (x))∧¬rezolva(x , fy (x)))∨apreciaza(fz(x),x)

D (lab(fy (x))∨apreciaza(fz(x),x))

∧ (¬rezolva(x , fy (x))∨apreciaza(fz(x),x))

C {lab(fy (x)),apreciaza(fz(x),x)},{¬rezolva(x , fy (x)),apreciaza(fz(x),x)}

397 / 423

Page 1007: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Introducere

Logica propozit,ionalaSintaxa s, i semanticaSatisfiabilitate s, i validitateDerivabilitateInferent,a s, i demonstrat,ieRezolut,ie

Logica cu predicate de ordinul ISintaxa s, i semanticaForma clauzalaUnificare

398 / 423

Page 1008: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Motivat,ie

I Rezolut,ie:

{prieten(x ,mama(y)),doctor (x)}{¬prieten(mama(z),z)}?

I Cum aplicam rezolut,ia?

I Solut,ia: unificare (v. sinteza de tip, slide-ul 241)

I MGU: S = {x ←mama(z),z ←mama(y)}

I Forma comuna a celor doi atomi:prieten(mama(mama(y)),mama(y))

I Rezolvent: doctor (mama(mama(y)))

399 / 423

Page 1009: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Unificare I

I Problema NP-completa

I Posibile legari ciclice

I Exemplu: prieten(x ,mama(x)) s, i prieten(mama(y),y)

I MGU: S = {x ←mama(y),y ←mama(x)}

I x ←mama(mama(x)) → imposibil!

I Solut,ie: verificarea aparit,iei unei variabile în expresiala care a fost legata (occurrence check)

400 / 423

Page 1010: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Unificare II

I Rezolut,ia pentru clauze Horn:

A1∧ . . .∧Am⇒ AB1∧ . . .∧A′∧ . . .∧Bn⇒ Bunificare(A,A′) = Ssubst(S, A1∧ . . .∧Am ∧B1∧ . . .∧Bn⇒ B)

I unificare(α,β ): substitut,ia sub care unifica propozit,iileα s, i β

I subst(S,α): propozit,ia rezultata în urma aplicariisubstitut,iei S asupra propozit,iei α

401 / 423

Page 1011: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Rezumat

I Expresivitatea superiora a logicii cu predicatede ordinul I, fat,a de cea propozit,ionala

I Propozit,ii satisfiabile, valide, nesatisfiabile

I Derivabilitate logica: proprietatea unei propozit,iide a reprezenta consecint,a logica a altora

I Derivabilitate mecanica (inferent,a): posibilitateaunei propozit,ii de a fi determinata drept consecint,aa altora, în baza unei proceduri de calcul(de inferent,a)

I Rezolut,ie: procedura de inferent,aconsistenta s, i completa (nu generativ)

402 / 423

Page 1012: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Bibliografie

Harrison, J. (2009). Handbook of Practical Logic andAutomated Reasoning. Cambridge University Press.

Genesereth, M. (2010). CS157: Computational Logic,curs Stanford.http://logic.stanford.edu/classes/cs157/2010/cs157.html

403 / 423

Page 1013: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Partea XIII

Mas, ina algoritmica Markov

404 / 423

Page 1014: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Introducere

Mas, ina algoritmica Markov

405 / 423

Page 1015: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Introducere

Mas, ina algoritmica Markov

406 / 423

Page 1016: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Mas, ina algoritmica Markov

I Model de calculabilitate efectiva, echivalentcu mas, ina Turing s, i cu calculul lambda

I Principiul de funct,ionare: identificare de s, abloane(eng. pattern matching) s, i substitut,ie

I Fundamentul teoretic al paradigmei asociatives, i al limbajelor bazate pe reguli

407 / 423

Page 1017: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Mas, ina algoritmica Markov

I Model de calculabilitate efectiva, echivalentcu mas, ina Turing s, i cu calculul lambda

I Principiul de funct,ionare: identificare de s, abloane(eng. pattern matching) s, i substitut,ie

I Fundamentul teoretic al paradigmei asociatives, i al limbajelor bazate pe reguli

407 / 423

Page 1018: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Mas, ina algoritmica Markov

I Model de calculabilitate efectiva, echivalentcu mas, ina Turing s, i cu calculul lambda

I Principiul de funct,ionare: identificare de s, abloane(eng. pattern matching) s, i substitut,ie

I Fundamentul teoretic al paradigmei asociatives, i al limbajelor bazate pe reguli

407 / 423

Page 1019: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Paradigma asociativa

I Potrivita mai ales în cazul problemelor ce nu admito solut,ie precisa, algoritmica

I Codificarea cunos, tint,elor specifice unui domenius, i aplicarea lor într-o maniera euristica

I Descrierea proprietat,ilor solut,iei, prin contrastcu pas, ii care trebuie realizat,i pentru obt,inereaacesteia (ce trebuie obt,inut vs. cum)

I Absent,a unui flux explicit de control, deciziile fiinddeterminate implicit, de cunos, tint,ele valabilela un anumit moment — data-driven control

408 / 423

Page 1020: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Paradigma asociativa

I Potrivita mai ales în cazul problemelor ce nu admito solut,ie precisa, algoritmica

I Codificarea cunos, tint,elor specifice unui domenius, i aplicarea lor într-o maniera euristica

I Descrierea proprietat,ilor solut,iei, prin contrastcu pas, ii care trebuie realizat,i pentru obt,inereaacesteia (ce trebuie obt,inut vs. cum)

I Absent,a unui flux explicit de control, deciziile fiinddeterminate implicit, de cunos, tint,ele valabilela un anumit moment — data-driven control

408 / 423

Page 1021: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Paradigma asociativa

I Potrivita mai ales în cazul problemelor ce nu admito solut,ie precisa, algoritmica

I Codificarea cunos, tint,elor specifice unui domenius, i aplicarea lor într-o maniera euristica

I Descrierea proprietat,ilor solut,iei, prin contrastcu pas, ii care trebuie realizat,i pentru obt,inereaacesteia (ce trebuie obt,inut vs. cum)

I Absent,a unui flux explicit de control, deciziile fiinddeterminate implicit, de cunos, tint,ele valabilela un anumit moment — data-driven control

408 / 423

Page 1022: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Paradigma asociativa

I Potrivita mai ales în cazul problemelor ce nu admito solut,ie precisa, algoritmica

I Codificarea cunos, tint,elor specifice unui domenius, i aplicarea lor într-o maniera euristica

I Descrierea proprietat,ilor solut,iei, prin contrastcu pas, ii care trebuie realizat,i pentru obt,inereaacesteia (ce trebuie obt,inut vs. cum)

I Absent,a unui flux explicit de control, deciziile fiinddeterminate implicit, de cunos, tint,ele valabilela un anumit moment — data-driven control

408 / 423

Page 1023: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Cuprins

Introducere

Mas, ina algoritmica Markov

409 / 423

Page 1024: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Structura

AMSA

UC

SRD

I Registrul de date, RD, cu secvent,a de simboli, S

I Unitatea de control, UC

I Spat,iul de stocare a algoritmului, SA, ce cont,inealgoritmul Markov, AM

410 / 423

Page 1025: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Algoritmi

1 setDiff1(A, B); A g1; B g2;

2 ag2 -> a;

3 ag1 -> g1a;

4 a -> .;

5 -> a;

6 end

1 setDiff2(A, B); B g2;

2 g2 -> ;

3 -> .;

4 end

411 / 423

Page 1026: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Registrul de date

I Nemarginit la dreapta

I Simboli din alfabetul Ab∪Al:

I Ab: alfabetul de bazaI Al: alfabetul local / de lucruI Ab∩Al = /0

I S, irurile init,ial s, i final, formate doar cu simboli din Ab

I Simbolii din Al, utilizabili exclusiv în timpul execut,iei

I S, irul de simboli, posibil vid

412 / 423

Page 1027: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Registrul de date

I Nemarginit la dreapta

I Simboli din alfabetul Ab∪Al:

I Ab: alfabetul de bazaI Al: alfabetul local / de lucruI Ab∩Al = /0

I S, irurile init,ial s, i final, formate doar cu simboli din Ab

I Simbolii din Al, utilizabili exclusiv în timpul execut,iei

I S, irul de simboli, posibil vid

412 / 423

Page 1028: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Registrul de date

I Nemarginit la dreapta

I Simboli din alfabetul Ab∪Al:I Ab: alfabetul de baza

I Al: alfabetul local / de lucruI Ab∩Al = /0

I S, irurile init,ial s, i final, formate doar cu simboli din Ab

I Simbolii din Al, utilizabili exclusiv în timpul execut,iei

I S, irul de simboli, posibil vid

412 / 423

Page 1029: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Registrul de date

I Nemarginit la dreapta

I Simboli din alfabetul Ab∪Al:I Ab: alfabetul de bazaI Al: alfabetul local / de lucru

I Ab∩Al = /0

I S, irurile init,ial s, i final, formate doar cu simboli din Ab

I Simbolii din Al, utilizabili exclusiv în timpul execut,iei

I S, irul de simboli, posibil vid

412 / 423

Page 1030: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Registrul de date

I Nemarginit la dreapta

I Simboli din alfabetul Ab∪Al:I Ab: alfabetul de bazaI Al: alfabetul local / de lucruI Ab∩Al = /0

I S, irurile init,ial s, i final, formate doar cu simboli din Ab

I Simbolii din Al, utilizabili exclusiv în timpul execut,iei

I S, irul de simboli, posibil vid

412 / 423

Page 1031: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Registrul de date

I Nemarginit la dreapta

I Simboli din alfabetul Ab∪Al:I Ab: alfabetul de bazaI Al: alfabetul local / de lucruI Ab∩Al = /0

I S, irurile init,ial s, i final, formate doar cu simboli din Ab

I Simbolii din Al, utilizabili exclusiv în timpul execut,iei

I S, irul de simboli, posibil vid

412 / 423

Page 1032: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Registrul de date

I Nemarginit la dreapta

I Simboli din alfabetul Ab∪Al:I Ab: alfabetul de bazaI Al: alfabetul local / de lucruI Ab∩Al = /0

I S, irurile init,ial s, i final, formate doar cu simboli din Ab

I Simbolii din Al, utilizabili exclusiv în timpul execut,iei

I S, irul de simboli, posibil vid

412 / 423

Page 1033: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Registrul de date

I Nemarginit la dreapta

I Simboli din alfabetul Ab∪Al:I Ab: alfabetul de bazaI Al: alfabetul local / de lucruI Ab∩Al = /0

I S, irurile init,ial s, i final, formate doar cu simboli din Ab

I Simbolii din Al, utilizabili exclusiv în timpul execut,iei

I S, irul de simboli, posibil vid

412 / 423

Page 1034: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ReguliI Unitatea de baza a unui algoritm Markov:

regula asociativa de substitut,ie:s,ablon de identificare (LHS) ->

s,ablon de substitut,ie (RHS)

I Exemplu: ag1c -> ac

I S, abloanele: secvent,e de simboli:

I constante: simboli din Ab

I variabile locale: simboli din Al

I variabile generice: simboli speciali, din mult,imea G,legat,i la simboli din Ab

I Pentru RHS = “.” — regula terminala, ce încheieexecut,ia mas, inii

413 / 423

Page 1035: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ReguliI Unitatea de baza a unui algoritm Markov:

regula asociativa de substitut,ie:s,ablon de identificare (LHS) ->

s,ablon de substitut,ie (RHS)

I Exemplu: ag1c -> ac

I S, abloanele: secvent,e de simboli:

I constante: simboli din Ab

I variabile locale: simboli din Al

I variabile generice: simboli speciali, din mult,imea G,legat,i la simboli din Ab

I Pentru RHS = “.” — regula terminala, ce încheieexecut,ia mas, inii

413 / 423

Page 1036: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ReguliI Unitatea de baza a unui algoritm Markov:

regula asociativa de substitut,ie:s,ablon de identificare (LHS) ->

s,ablon de substitut,ie (RHS)

I Exemplu: ag1c -> ac

I S, abloanele: secvent,e de simboli:

I constante: simboli din Ab

I variabile locale: simboli din Al

I variabile generice: simboli speciali, din mult,imea G,legat,i la simboli din Ab

I Pentru RHS = “.” — regula terminala, ce încheieexecut,ia mas, inii

413 / 423

Page 1037: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ReguliI Unitatea de baza a unui algoritm Markov:

regula asociativa de substitut,ie:s,ablon de identificare (LHS) ->

s,ablon de substitut,ie (RHS)

I Exemplu: ag1c -> ac

I S, abloanele: secvent,e de simboli:I constante: simboli din Ab

I variabile locale: simboli din Al

I variabile generice: simboli speciali, din mult,imea G,legat,i la simboli din Ab

I Pentru RHS = “.” — regula terminala, ce încheieexecut,ia mas, inii

413 / 423

Page 1038: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ReguliI Unitatea de baza a unui algoritm Markov:

regula asociativa de substitut,ie:s,ablon de identificare (LHS) ->

s,ablon de substitut,ie (RHS)

I Exemplu: ag1c -> ac

I S, abloanele: secvent,e de simboli:I constante: simboli din Ab

I variabile locale: simboli din Al

I variabile generice: simboli speciali, din mult,imea G,legat,i la simboli din Ab

I Pentru RHS = “.” — regula terminala, ce încheieexecut,ia mas, inii

413 / 423

Page 1039: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ReguliI Unitatea de baza a unui algoritm Markov:

regula asociativa de substitut,ie:s,ablon de identificare (LHS) ->

s,ablon de substitut,ie (RHS)

I Exemplu: ag1c -> ac

I S, abloanele: secvent,e de simboli:I constante: simboli din Ab

I variabile locale: simboli din Al

I variabile generice: simboli speciali, din mult,imea G,legat,i la simboli din Ab

I Pentru RHS = “.” — regula terminala, ce încheieexecut,ia mas, inii

413 / 423

Page 1040: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

ReguliI Unitatea de baza a unui algoritm Markov:

regula asociativa de substitut,ie:s,ablon de identificare (LHS) ->

s,ablon de substitut,ie (RHS)

I Exemplu: ag1c -> ac

I S, abloanele: secvent,e de simboli:I constante: simboli din Ab

I variabile locale: simboli din Al

I variabile generice: simboli speciali, din mult,imea G,legat,i la simboli din Ab

I Pentru RHS = “.” — regula terminala, ce încheieexecut,ia mas, inii

413 / 423

Page 1041: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Variabile generice

I Legate la exact un simbol

I De obicei, notate cu g, urmat de un indice

I Mult,imea valorilor pe care le poate lua o variabila:domeniul variabilei, Dom(g)

I Utilizabile în RHS doar în cazul aparit,iei în LHS

414 / 423

Page 1042: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Variabile generice

I Legate la exact un simbol

I De obicei, notate cu g, urmat de un indice

I Mult,imea valorilor pe care le poate lua o variabila:domeniul variabilei, Dom(g)

I Utilizabile în RHS doar în cazul aparit,iei în LHS

414 / 423

Page 1043: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Variabile generice

I Legate la exact un simbol

I De obicei, notate cu g, urmat de un indice

I Mult,imea valorilor pe care le poate lua o variabila:domeniul variabilei, Dom(g)

I Utilizabile în RHS doar în cazul aparit,iei în LHS

414 / 423

Page 1044: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Variabile generice

I Legate la exact un simbol

I De obicei, notate cu g, urmat de un indice

I Mult,imea valorilor pe care le poate lua o variabila:domeniul variabilei, Dom(g)

I Utilizabile în RHS doar în cazul aparit,iei în LHS

414 / 423

Page 1045: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Algoritmi (detaliu)I Mult,imi ordonate de reguli, îmbogat,ite cu declarat,ii de

I partit,ionare a mult,imii Ab

I variabile generice

I Exemplu: eliminarea simbolilor ce apart,in mult,imii B:1 setDiff1(A, B); A g1; B g2;

2 ag2 -> a;

3 ag1 -> g1a;

4 a -> .;

5 -> a;

6 end

1 setDiff2(A, B); B g2;

2 g2 -> ;

3 -> .;

4 end

I A,B⊆ Ab

I g1, g2: variabile genericeI a: nedeclarata, variabila locala (a ∈ Al)

415 / 423

Page 1046: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Aplicabilitatea regulilor

Regula r : a1...an -> b1...bm este aplicabila daca s, inumai daca exista un subs, ir c1...cn, în RD, astfel încât,pentru orice i = 1,n, exact o condit,ie de mai jos esteîndeplinita:

I ai ∈ Ab∧ai = ci

I ai ∈ Al∧ai = ci

I ai ∈G∧ (∀j = 1,n • aj = ai⇒ cj ∈ Dom(ai)∧cj = ci),i.e. variabila ai este legata la o valoare unica,obt,inuta prin potrivirea dintre s, ablon s, i subs, ir.

416 / 423

Page 1047: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Aplicarea regulilor

Aplicarea regulii r : a1...an -> b1...bm asupra unuisubs, ir s = c1...cn, în raport cu care este aplicabila,consta în substituirea lui s prin subs, irul q1...qm, calculatastfel:

I bi ∈ Ab⇒ qi = bi

I bi ∈ Al⇒ qi = bi

I bi ∈G∧ (∃j = 1,n • bi = aj)⇒ qi = cj

417 / 423

Page 1048: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Exemplu de aplicare

I Ab = {1, 2, 3}

I Al = {x, y}

I Dom(g1) = {2}

I Dom(g2) = Ab

I s = 1111112x2y31111

I r : 1g1xg1yg2 -> 1g2x

s = 11111 1 2 x 2 y 3 1111

r : 1 g1 x g1 y g2 -> 1g2x

s’ = 1111113x1111

418 / 423

Page 1049: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Aplicabilitate vs. aplicare

I Aplicabilitatea potent,iala a

I unei reguli pe mai multe subs, iruriI mai multor reguli pe acelas, i subs, ir

I La un anumit moment, aplicarea propriu-zisa a uneisingure reguli asupra unui singur subs, ir

I Nedeterminism inerent, ce trebuie rezolvat

I Convent,ie:

I aplicarea primei reguli aplicabile, în ordinea definirii,I asupra celui mai din stânga subs, ir asupra careia este

aplicabila

419 / 423

Page 1050: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Aplicabilitate vs. aplicare

I Aplicabilitatea potent,iala aI unei reguli pe mai multe subs, iruri

I mai multor reguli pe acelas, i subs, ir

I La un anumit moment, aplicarea propriu-zisa a uneisingure reguli asupra unui singur subs, ir

I Nedeterminism inerent, ce trebuie rezolvat

I Convent,ie:

I aplicarea primei reguli aplicabile, în ordinea definirii,I asupra celui mai din stânga subs, ir asupra careia este

aplicabila

419 / 423

Page 1051: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Aplicabilitate vs. aplicare

I Aplicabilitatea potent,iala aI unei reguli pe mai multe subs, iruriI mai multor reguli pe acelas, i subs, ir

I La un anumit moment, aplicarea propriu-zisa a uneisingure reguli asupra unui singur subs, ir

I Nedeterminism inerent, ce trebuie rezolvat

I Convent,ie:

I aplicarea primei reguli aplicabile, în ordinea definirii,I asupra celui mai din stânga subs, ir asupra careia este

aplicabila

419 / 423

Page 1052: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Aplicabilitate vs. aplicare

I Aplicabilitatea potent,iala aI unei reguli pe mai multe subs, iruriI mai multor reguli pe acelas, i subs, ir

I La un anumit moment, aplicarea propriu-zisa a uneisingure reguli asupra unui singur subs, ir

I Nedeterminism inerent, ce trebuie rezolvat

I Convent,ie:

I aplicarea primei reguli aplicabile, în ordinea definirii,I asupra celui mai din stânga subs, ir asupra careia este

aplicabila

419 / 423

Page 1053: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Aplicabilitate vs. aplicare

I Aplicabilitatea potent,iala aI unei reguli pe mai multe subs, iruriI mai multor reguli pe acelas, i subs, ir

I La un anumit moment, aplicarea propriu-zisa a uneisingure reguli asupra unui singur subs, ir

I Nedeterminism inerent, ce trebuie rezolvat

I Convent,ie:

I aplicarea primei reguli aplicabile, în ordinea definirii,I asupra celui mai din stânga subs, ir asupra careia este

aplicabila

419 / 423

Page 1054: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Aplicabilitate vs. aplicare

I Aplicabilitatea potent,iala aI unei reguli pe mai multe subs, iruriI mai multor reguli pe acelas, i subs, ir

I La un anumit moment, aplicarea propriu-zisa a uneisingure reguli asupra unui singur subs, ir

I Nedeterminism inerent, ce trebuie rezolvat

I Convent,ie:

I aplicarea primei reguli aplicabile, în ordinea definirii,I asupra celui mai din stânga subs, ir asupra careia este

aplicabila

419 / 423

Page 1055: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Aplicabilitate vs. aplicare

I Aplicabilitatea potent,iala aI unei reguli pe mai multe subs, iruriI mai multor reguli pe acelas, i subs, ir

I La un anumit moment, aplicarea propriu-zisa a uneisingure reguli asupra unui singur subs, ir

I Nedeterminism inerent, ce trebuie rezolvat

I Convent,ie:I aplicarea primei reguli aplicabile, în ordinea definirii,

I asupra celui mai din stânga subs, ir asupra careia esteaplicabila

419 / 423

Page 1056: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Aplicabilitate vs. aplicare

I Aplicabilitatea potent,iala aI unei reguli pe mai multe subs, iruriI mai multor reguli pe acelas, i subs, ir

I La un anumit moment, aplicarea propriu-zisa a uneisingure reguli asupra unui singur subs, ir

I Nedeterminism inerent, ce trebuie rezolvat

I Convent,ie:I aplicarea primei reguli aplicabile, în ordinea definirii,I asupra celui mai din stânga subs, ir asupra careia este

aplicabila

419 / 423

Page 1057: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Unitatea de control I

S

Regula 1

...

Regula k

prima regula aplicabila

Aplicarea regulii

...

Regula n

420 / 423

Page 1058: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Unitatea de control II

I Analogie cu o sita pe mai multe nivele, ce corespundregulilor

I Aplicabilitatea testata secvent,ial

I Etape:

1. determinarea primei reguli aplicabile

2. aplicarea acesteia

3. actualizarea RD

4. salt la pasul 1

421 / 423

Page 1059: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Inversarea intrarii

Ideea: mutarea pe rând, a fiecarui element în pozit,iacorespunzatoare, prin interschimbarea elementeloradiacente

1 Reverse(A); A g1, g2;

2 ag1g2 -> g2ag1;

3 ag1 -> bg1;

4 abg1 -> g1a;

5 a -> .;

6 -> a;

7 end

DOP

6−→ aDOP2−→ OaDP

2−→ OPaD3−→ OPbD

6−→ aOPbD2−→ PaObD

3−→ PbObD6−→ aPbObD

3−→ bPbObD6−→ abPbObD

4−→ PabObD4−→ POabD

4−→ PODa5−→ .

422 / 423

Page 1060: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Inversarea intrarii

Ideea: mutarea pe rând, a fiecarui element în pozit,iacorespunzatoare, prin interschimbarea elementeloradiacente

1 Reverse(A); A g1, g2;

2 ag1g2 -> g2ag1;

3 ag1 -> bg1;

4 abg1 -> g1a;

5 a -> .;

6 -> a;

7 end

DOP6−→ aDOP

2−→ OaDP2−→ OPaD

3−→ OPbD6−→ aOPbD

2−→ PaObD3−→ PbObD

6−→ aPbObD3−→ bPbObD

6−→ abPbObD4−→ PabObD

4−→ POabD4−→ PODa

5−→ .

422 / 423

Page 1061: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Inversarea intrarii

Ideea: mutarea pe rând, a fiecarui element în pozit,iacorespunzatoare, prin interschimbarea elementeloradiacente

1 Reverse(A); A g1, g2;

2 ag1g2 -> g2ag1;

3 ag1 -> bg1;

4 abg1 -> g1a;

5 a -> .;

6 -> a;

7 end

DOP6−→ aDOP

2−→ OaDP

2−→ OPaD3−→ OPbD

6−→ aOPbD2−→ PaObD

3−→ PbObD6−→ aPbObD

3−→ bPbObD6−→ abPbObD

4−→ PabObD4−→ POabD

4−→ PODa5−→ .

422 / 423

Page 1062: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Inversarea intrarii

Ideea: mutarea pe rând, a fiecarui element în pozit,iacorespunzatoare, prin interschimbarea elementeloradiacente

1 Reverse(A); A g1, g2;

2 ag1g2 -> g2ag1;

3 ag1 -> bg1;

4 abg1 -> g1a;

5 a -> .;

6 -> a;

7 end

DOP6−→ aDOP

2−→ OaDP2−→ OPaD

3−→ OPbD6−→ aOPbD

2−→ PaObD3−→ PbObD

6−→ aPbObD3−→ bPbObD

6−→ abPbObD4−→ PabObD

4−→ POabD4−→ PODa

5−→ .

422 / 423

Page 1063: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Inversarea intrarii

Ideea: mutarea pe rând, a fiecarui element în pozit,iacorespunzatoare, prin interschimbarea elementeloradiacente

1 Reverse(A); A g1, g2;

2 ag1g2 -> g2ag1;

3 ag1 -> bg1;

4 abg1 -> g1a;

5 a -> .;

6 -> a;

7 end

DOP6−→ aDOP

2−→ OaDP2−→ OPaD

3−→ OPbD

6−→ aOPbD2−→ PaObD

3−→ PbObD6−→ aPbObD

3−→ bPbObD6−→ abPbObD

4−→ PabObD4−→ POabD

4−→ PODa5−→ .

422 / 423

Page 1064: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Inversarea intrarii

Ideea: mutarea pe rând, a fiecarui element în pozit,iacorespunzatoare, prin interschimbarea elementeloradiacente

1 Reverse(A); A g1, g2;

2 ag1g2 -> g2ag1;

3 ag1 -> bg1;

4 abg1 -> g1a;

5 a -> .;

6 -> a;

7 end

DOP6−→ aDOP

2−→ OaDP2−→ OPaD

3−→ OPbD6−→ aOPbD

2−→ PaObD3−→ PbObD

6−→ aPbObD3−→ bPbObD

6−→ abPbObD4−→ PabObD

4−→ POabD4−→ PODa

5−→ .

422 / 423

Page 1065: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Inversarea intrarii

Ideea: mutarea pe rând, a fiecarui element în pozit,iacorespunzatoare, prin interschimbarea elementeloradiacente

1 Reverse(A); A g1, g2;

2 ag1g2 -> g2ag1;

3 ag1 -> bg1;

4 abg1 -> g1a;

5 a -> .;

6 -> a;

7 end

DOP6−→ aDOP

2−→ OaDP2−→ OPaD

3−→ OPbD6−→ aOPbD

2−→ PaObD

3−→ PbObD6−→ aPbObD

3−→ bPbObD6−→ abPbObD

4−→ PabObD4−→ POabD

4−→ PODa5−→ .

422 / 423

Page 1066: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Inversarea intrarii

Ideea: mutarea pe rând, a fiecarui element în pozit,iacorespunzatoare, prin interschimbarea elementeloradiacente

1 Reverse(A); A g1, g2;

2 ag1g2 -> g2ag1;

3 ag1 -> bg1;

4 abg1 -> g1a;

5 a -> .;

6 -> a;

7 end

DOP6−→ aDOP

2−→ OaDP2−→ OPaD

3−→ OPbD6−→ aOPbD

2−→ PaObD3−→ PbObD

6−→ aPbObD3−→ bPbObD

6−→ abPbObD4−→ PabObD

4−→ POabD4−→ PODa

5−→ .

422 / 423

Page 1067: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Inversarea intrarii

Ideea: mutarea pe rând, a fiecarui element în pozit,iacorespunzatoare, prin interschimbarea elementeloradiacente

1 Reverse(A); A g1, g2;

2 ag1g2 -> g2ag1;

3 ag1 -> bg1;

4 abg1 -> g1a;

5 a -> .;

6 -> a;

7 end

DOP6−→ aDOP

2−→ OaDP2−→ OPaD

3−→ OPbD6−→ aOPbD

2−→ PaObD3−→ PbObD

6−→ aPbObD

3−→ bPbObD6−→ abPbObD

4−→ PabObD4−→ POabD

4−→ PODa5−→ .

422 / 423

Page 1068: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Inversarea intrarii

Ideea: mutarea pe rând, a fiecarui element în pozit,iacorespunzatoare, prin interschimbarea elementeloradiacente

1 Reverse(A); A g1, g2;

2 ag1g2 -> g2ag1;

3 ag1 -> bg1;

4 abg1 -> g1a;

5 a -> .;

6 -> a;

7 end

DOP6−→ aDOP

2−→ OaDP2−→ OPaD

3−→ OPbD6−→ aOPbD

2−→ PaObD3−→ PbObD

6−→ aPbObD3−→ bPbObD

6−→ abPbObD4−→ PabObD

4−→ POabD4−→ PODa

5−→ .

422 / 423

Page 1069: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Inversarea intrarii

Ideea: mutarea pe rând, a fiecarui element în pozit,iacorespunzatoare, prin interschimbarea elementeloradiacente

1 Reverse(A); A g1, g2;

2 ag1g2 -> g2ag1;

3 ag1 -> bg1;

4 abg1 -> g1a;

5 a -> .;

6 -> a;

7 end

DOP6−→ aDOP

2−→ OaDP2−→ OPaD

3−→ OPbD6−→ aOPbD

2−→ PaObD3−→ PbObD

6−→ aPbObD3−→ bPbObD

6−→ abPbObD

4−→ PabObD4−→ POabD

4−→ PODa5−→ .

422 / 423

Page 1070: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Inversarea intrarii

Ideea: mutarea pe rând, a fiecarui element în pozit,iacorespunzatoare, prin interschimbarea elementeloradiacente

1 Reverse(A); A g1, g2;

2 ag1g2 -> g2ag1;

3 ag1 -> bg1;

4 abg1 -> g1a;

5 a -> .;

6 -> a;

7 end

DOP6−→ aDOP

2−→ OaDP2−→ OPaD

3−→ OPbD6−→ aOPbD

2−→ PaObD3−→ PbObD

6−→ aPbObD3−→ bPbObD

6−→ abPbObD4−→ PabObD

4−→ POabD4−→ PODa

5−→ .

422 / 423

Page 1071: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Inversarea intrarii

Ideea: mutarea pe rând, a fiecarui element în pozit,iacorespunzatoare, prin interschimbarea elementeloradiacente

1 Reverse(A); A g1, g2;

2 ag1g2 -> g2ag1;

3 ag1 -> bg1;

4 abg1 -> g1a;

5 a -> .;

6 -> a;

7 end

DOP6−→ aDOP

2−→ OaDP2−→ OPaD

3−→ OPbD6−→ aOPbD

2−→ PaObD3−→ PbObD

6−→ aPbObD3−→ bPbObD

6−→ abPbObD4−→ PabObD

4−→ POabD

4−→ PODa5−→ .

422 / 423

Page 1072: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Inversarea intrarii

Ideea: mutarea pe rând, a fiecarui element în pozit,iacorespunzatoare, prin interschimbarea elementeloradiacente

1 Reverse(A); A g1, g2;

2 ag1g2 -> g2ag1;

3 ag1 -> bg1;

4 abg1 -> g1a;

5 a -> .;

6 -> a;

7 end

DOP6−→ aDOP

2−→ OaDP2−→ OPaD

3−→ OPbD6−→ aOPbD

2−→ PaObD3−→ PbObD

6−→ aPbObD3−→ bPbObD

6−→ abPbObD4−→ PabObD

4−→ POabD4−→ PODa

5−→ .

422 / 423

Page 1073: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Inversarea intrarii

Ideea: mutarea pe rând, a fiecarui element în pozit,iacorespunzatoare, prin interschimbarea elementeloradiacente

1 Reverse(A); A g1, g2;

2 ag1g2 -> g2ag1;

3 ag1 -> bg1;

4 abg1 -> g1a;

5 a -> .;

6 -> a;

7 end

DOP6−→ aDOP

2−→ OaDP2−→ OPaD

3−→ OPbD6−→ aOPbD

2−→ PaObD3−→ PbObD

6−→ aPbObD3−→ bPbObD

6−→ abPbObD4−→ PabObD

4−→ POabD4−→ PODa

5−→ .

422 / 423

Page 1074: elf.cs.pub.roelf.cs.pub.ro/pp/_media/19/cursuri/mihnea/slides.pdfelf.cs.pub.ro

Rezumat

Mas, ina Markov: model de calculabilitate,bazat pe identificari spontane de s, abloane

s, i pe substitut,ie

423 / 423