Documente Academic
Documente Profesional
Documente Cultură
Ana Iova
Denisa Diaconescu
1
Organizare
Instructori
• Curs
• Seria 23: Ana Iova
• Seria 24: Denisa Diaconescu
• Seria 25: Ana Iova
• Laborator
• 231: Ana Iova
• 232: Natalia Ozunu
• 233: Miruna Zăvelcă
• 234: Miruna Zăvelcă
• 241: Andrei Burdus, a
• 242: Andrei Burdus, a
• 243: Andrei Burdus, a
• 244: Andrei Văcaru
• 251: Ana Iova
• 252: Ana Iova
2
Resurse
• Moodle
3
Prezent, ă
4
Evaluare
Notare
Condit, ie de promovabilitate
5
Examen part, ial
6
Examen final
7
Puncte bonus
Activitate laborator
8
Imagine de ansamblu
• Tipuri, functii
• Recursivitate, liste
• Funct, ii de nivel înalt
• Polimorfism
• Tipuri de date algebrice
• Clase de tipuri
• Functori
• Monade
9
Resurse suplimentare
• Pagina Haskell
http://haskell.org
• Hoogle
https://www.haskell.org/hoogle
• Haskell Wiki
http://wiki.haskell.org
• Cartea online „Learn You a Haskell for Great Good”
http://learnyouahaskell.com/
10
The Haskell Foundation
• https://haskell.foundation/
• Fundatie independenta si non-profit ce are ca scop
imbunatatirea experientei cu limbajul Haskell
• Ofera suport pentru librarii, tool-uri, educatie, cercetare
11
Integritate academică
12
De ce programare funct, ională?
Programare declarativă vs. imperativă – Ce vs. cum
13
Programare declarativă vs. imperativă – Ce vs. cum
13
Programare declarativă vs. imperativă – Ce vs. cum
13
Programare declarativă vs. imperativă – Ce vs. cum
14
Agregarea datelor dintr-o colect, ie (JS)
15
Agregarea datelor dintr-o colect, ie (JS)
16
Programare funct, ională în Haskell
primes = s i e v e [ 2 . . ]
s i e v e ( p : ps ) = p : s i e v e [ x | x <− ps , mod x p / = 0 ]
17
Haskell este un limbaj funct, ional pur
18
Haskell este un limbaj elegant
19
Haskell
20
Exemplu
21
Haskell in industrie
Linkuri suplimentare:
Haskell in industrie - Wiki
Serokell Blog Post: Best Haskell open source projects
Typeable Blog Post: 7 Useful Tools Written in Haskell
Serokell Blog Post: Why Fintech Companies Use Haskell
Wasp Blog Post: How to get started with Haskell in 2022 (the straightforward way)
22
Haskell in industrie
https://serokell.io/blog/10-reasons-to-use-haskell
23
λ-calcul
t= x (variabilă)
| λx . t (abstractizare)
|t t (aplicare)
24
λ-calcul
25
Elemente de bază. Primii pas, i
Sintaxă
Comentarii
−− comentariu pe o l i n i e
{ − comentariu pe
mai multe
l i n i i −}
Identificatori
Blocuri s, i indentare.
trei = let
a = 1
b = 2
in a + b
27
Variabile
Ce valoare are x?
28
Variabile
Ce valoare are x?
28
Variabile
29
Legarea variabilelor
30
Legarea variabilelor
30
Legarea variabilelor
Ce valoare are x?
31
Legarea variabilelor
Ce valoare are x?
−− x=12
31
Legarea variabilelor
Ce valoare are x?
−− x=12
x = l e t z = 5; g u = z + u in l e t z = 7 in g 0
Ce valoare are x?
31
Legarea variabilelor
Ce valoare are x?
−− x=12
x = l e t z = 5; g u = z + u in l e t z = 7 in g 0
Ce valoare are x?
−− x=5
31
Legarea variabilelor
32
Legarea variabilelor
33
Legarea variabilelor
Seria 24 https://tinyurl.com/yc8kdvjm
Seria 25 https://questionpro.com/t/AT4qgZuulJ
34
Tipuri de date. Sistemul tipurilor
35
Sistemul tipurilor
36
Sistemul tipurilor
36
Sistemul tipurilor
36
Tipuri de date
Integer: 4, 0, -5
Float: 3.14
String: "prog\ndec"
type S t r i n g = [ Char ] −− sinonim p e n t r u t i p
Prelude > " aa " ++ " bb " Prelude > l i n e s " prog \ ndec "
" aabb " [ " prog " , " dec " ]
Prelude > " aabb " ! ! 2 Prelude > words " p r og \ nde c l "
’b ’ [ " p r " , " og " , " de " , " c l " ]
38
Liste
Orice listă poate fi scrisă folosind doar constructorul (:) s, i lista vidă [].
• [1,2,3] == 1 : (2 : (3 : [])) == 1 : 2 : 3 : []
• "abcd" == [’a’,’b’,’c’,’d’] == ’a’ : (’b’ : (’c’ : (’d’ : [])))
== ’a’ : ’b’ : ’c’ : ’d’ : []
39
Liste
Orice listă poate fi scrisă folosind doar constructorul (:) s, i lista vidă [].
• [1,2,3] == 1 : (2 : (3 : [])) == 1 : 2 : 3 : []
• "abcd" == [’a’,’b’,’c’,’d’] == ’a’ : (’b’ : (’c’ : (’d’ : [])))
== ’a’ : ’b’ : ’c’ : ’d’ : []
39
Tipuri de date compuse
Tipul listă
Prelude > : t [ True , False , True ]
[ True , False , True ] : : [ Bool ]
40
Tipuri de date compuse
Tipul listă
Prelude > : t [ True , False , True ]
[ True , False , True ] : : [ Bool ]
40
Tipuri. Clase de tipuri. Variabile de tip
41
Tipuri. Clase de tipuri. Variabile de tip
Prelude > : t [ 1 , 2 , 3 ]
[ 1 , 2 , 3 ] : : Num t => [ t ]
41
Funct, ii în Haskell. Terminologie
Prelude > : t ( : )
( : ) : : a −> [ a ] −> [ a ]
Prelude > : t ( + + )
( + + ) : : [ a ] −> [ a ] −> [ a ]
Prelude > : t z i p
z i p : : [ a ] −> [ b ] −> [ ( a , b ) ]
45
Definirea funct, iilor
f a c t : : I n t e g e r −> I n t e g e r
• Definit, ie folosind if
f a c t n = i f n == 0 then 1
else n * f a c t ( n − 1)
46
S, abloane (patterns)
x : y = [ 1 , 2 , 3 ] −− x=1 s i y = [ 2 , 3 ]
( u , v ) = ( ’ a ’ , [ ( 1 , ’ a ’ ) , ( 2 , ’ b ’ ) ] ) −− u = ’ a ’ ,
−− v = [ ( 1 , ’ a ’ ) , ( 2 , ’ b ’ ) ]
47
S, abloane (patterns)
−− case . . . o f −− s t i l e c u a t i o n a l
selectie x s = selectie 0 s = s
case ( x , s ) of selectie 1 (_: s) = s
( 0 , _ ) −> s selectie 1 " " = " "
( 1 , z : zs ) −> zs selectie _ s = s + s
( 1 , [ ] ) −> [ ]
_ −> ( s ++ s )
48
Tipuri de funct, ii
49
Quiz time!
Seria 23 https://questionpro.com/t/AT4qgZuulp
Seria 24 https://tinyurl.com/5n6s87ks
Seria 25 https://questionpro.com/t/AT4qgZuulm
50
Pe săptămâna viitoare!
51