Sunteți pe pagina 1din 9

Programare declarativa

Categorii1

Ioana Leus, tean


Traian Florin S, erbanut, a

Departamentul de Informatica, FMI, UNIBUC


traian.serbanuta@unibuc.ro

7 decembrie 2017

1
bazat pe Categories for programmers
Ioana Leus, teanTraian Florin S, erbanut,a (UNIBUC) PDMeta-Programare 7 decembrie 2017 1/9
Categorii s, i Functori

Categorii s, i Functori

Ioana Leus, teanTraian Florin S, erbanut,a (UNIBUC) PDMeta-Programare 7 decembrie 2017 2/9
Categorii s, i Functori

Categorii
O categorie C este data de:
O clasa |C| a obiectelor
Pentru oricare doua obiecte A , B |C|,
o mult, ime C(A , B ) a saget, ilor de la A la B
f C(A , B ) poate fi scris ca f : A B
Pentru orice obiect A o sageata id A : A A numita identitatea lui A
Pentru orice obiecte A , B, C, o operat, ie de compunere a saget, ilor
: C(B , C ) C(A , B ) C(A , C )

Bartosz Milewski
Category: The
Essence of Composi-
tion
Compunerea este asociativa s, i are element neutru id
Ioana Leus, teanTraian Florin S, erbanut,a (UNIBUC) PDMeta-Programare 7 decembrie 2017 3/9
Categorii s, i Functori

Exemplu: Categoria Set

Obiecte: mult, imi


Saget, i: funct, ii
Identitat, i: Funct, iile identitate
Compunere: Compunerea funct, iilor

Ioana Leus, teanTraian Florin S, erbanut,a (UNIBUC) PDMeta-Programare 7 decembrie 2017 4/9
Categorii s, i Functori

Exemplu: Categoria Hask

Obiectele: tipuri
Saget, iile: funct, ii ntre tipuri
f : : A > B

Identitat, i: funct, ia polimorfica id


Prelude > : t i d
i d : : a > a

Compunere: funct, ia polimorfica (.)


Prelude > : t ( . )
( . ) : : ( b > c ) > ( a > b ) > a > c

Ioana Leus, teanTraian Florin S, erbanut,a (UNIBUC) PDMeta-Programare 7 decembrie 2017 5/9
Categorii s, i Functori

Subcategorii ale lui Hask date de tipuri parametrizate

Obiecte: o clasa restnsa de tipuri din |Hask|


Exemplu: tipuri de forma [a]
Saget, i: toate funct, iile din Hask ntre tipurile obiecte
Exemple: concat :: [[ a ]] > [a], words :: [Char] > [String],
reverse :: [a] > [a]

Exemple
Liste obiecte: tipuri de forma [a]
Optiuni obiecte: tipuri de forma Maybe a
Arbori obiecte: tipuri de forma Arbore a
Comenzi I/O obiecte: tipuri de forma IO a
Funct, ii de sursa t obiecte: tipuri de forma t -> a

Ioana Leus, teanTraian Florin S, erbanut,a (UNIBUC) PDMeta-Programare 7 decembrie 2017 6/9
Categorii s, i Functori

De ce categorii?

(Des)compunerea este esent, a programarii


Am de rezolvat problema P
O descompun n subproblemele P1 ,. . . Pn
Rezolv problemele P1 ,. . . Pn cu programele p1 ,. . . pn
Eventual aplicnd recursiv procedura de fat, a
Compun rezolvarile p1 ,. . . pn ntr-o rezolvare p pentru problema init, iala

Categoriile rezolva problema compunerii


Ne fort, eaza sa abstractizam datele
Se poate act, iona asupra datelor doar prin saget, i (metode?)
Fort, eaza un stil de compunere independent de structura obiectelor

Ioana Leus, teanTraian Florin S, erbanut,a (UNIBUC) PDMeta-Programare 7 decembrie 2017 7/9
Categorii s, i Functori

Functori

Date fiind doua categorii C s, i D, un functor F : C D este dat de


O funct, ie F : |C| |D| de la obiectele lui C la cele ale lui D
Pentru orice A , B |C|, o funct, ie F : C(A , B ) D(F (A ), F (B ))
Compatibila cu identitat, ile s, i cu compunerea
F (id A ) = id F (A ) pentru orice A
F (g f ) = F (g ) F (f ) pentru orice f : A B , g : B C, h = g f

Bartosz Milewski
Functors

Ioana Leus, teanTraian Florin S, erbanut,a (UNIBUC) PDMeta-Programare 7 decembrie 2017 8/9
Categorii s, i Functori

Functori n Haskell
n general un functor F : C D este dat de
O funct, ie F : |C| |D| de la obiectele lui C la cele ale lui D
Pentru orice A , B |C|, o funct, ie F : C(A , B ) D(F (A ), F (B ))
Compatibila cu identitat, ile s, i cu compunerea
F (id A ) = id F (A ) pentru orice A
F (g f ) = F (g ) F (f ) pentru orice f : A B , g : B C, h = g f
n Haskell o instant, a Functor m este data de
Un tip m a pentru orice tip a (deci m trebuie sa fie tip parametrizat)
Pentru orice doua tipuri a s, i b, o funct, ie
fmap : : ( a > b ) > (m a > m b )

Compatibila cu identitat, ile s, i cu compunerea


fmap i d == i d
fmap ( g . f ) == fmap g . fmap f
pentru orice f :: a > b s, i g :: b > c
Ioana Leus, teanTraian Florin S, erbanut,a (UNIBUC) PDMeta-Programare 7 decembrie 2017 9/9

S-ar putea să vă placă și