Documente Academic
Documente Profesional
Documente Cultură
Ana Iova
Denisa Diaconescu
1
Anunt - examen part, ial
2
Operatori. Sect, iuni
Operatorii sunt funct, ii cu două argumente
Operatorii în Haskell
• au două argumente
• pot fi apelat, i folosind notat, ia infix
• pot fi definit, i folosind numai "simboluri" (ex: *!*)
• în definit, ia tipului operatorul este scris între paranteze
• Operatori predefinit, i
( | | ) : : Bool −> Bool −> Bool
( : ) : : a −> [ a ] −> [ a ]
( + ) : : Num a => a −> a −> a
5
Asociativitate
5 − 2 − 1 == (5 − 2) − 1 −− /= 5 − (2 − 1)
5 : 2 : [] == 5 : (2 : [])
6
Sect, iuni (operator sections)
7
Sect, iuni (operator sections)
8
Sect, iuni
Prelude > : t ( * 3 + 4 )
error −− + are precedenta mai mica decat *
Prelude > : t ( * 3 * 4 )
error −− * e s t e a s o c i a t i v a l a stanga
Prelude > : t ( 3 * 4 * )
( 3 * 4 * ) : : Num a => a −> a
9
Funct, ii de nivel înalt
Funct, ii anonime
10
Funct, iile sunt valori
Exemplu:
f l i p : : ( a −> b −> c ) −> ( b −> a −> c )
11
Compunerea funct, iilor — operatorul .
(g ◦ f )(x ) = g (f (x ))
În Haskell.
( . ) : : ( b −> c ) −> ( a −> b ) −> ( a −> c )
(g . f ) x = g ( f x)
12
Exemplu
13
Operatorul $
14
Quiz time!
Seria 23: https://questionpro.com/t/AT4qgZu3zB
15
Procesarea fluxurilor de date:
Map, Filter, Fold
Transformarea fiecărui element dintr-o listă -
map
Exemplu - Pătrate
Solut, ie recursivă
squares : : [ I n t ] −> [ I n t ]
squares [ ] = []
squares ( x : xs ) = x * x : squares xs
16
Exemplu - Coduri ASCII
Solut, ie recursivă
ords : : [ Char ] −> [ I n t ]
ords [ ] = []
ords ( x : xs ) = ord x : ords xs
17
Funct, ia map
Solut, ie descriptivă
map : : ( a −> b ) −> [ a ] −> [ b ]
map f xs = [ f x | x <− xs ]
Solut, ie recursivă
map : : ( a −> b ) −> [ a ] −> [ b ]
map f [ ] = []
map f ( x : xs ) = f x : map f xs
18
Exemplu — Pătrate
Solut, ie descriptivă
squares : : [ I n t ] −> [ I n t ]
squares xs = [ x * x | x <− xs ]
Solut, ie recursivă
squares : : [ I n t ] −> [ I n t ]
squares [ ] = []
squares ( x : xs ) = x * x : squares xs
19
Exemplu — Coduri ASCII
Solut, ie descriptivă
ords : : [ Char ] −> [ I n t ]
ords xs = [ ord x | x <− xs ]
Solut, ie recursivă
ords : : [ Char ] −> [ I n t ]
ords [ ] = []
ords ( x : xs ) = ord x : ords xs
20
Funct, ii de ordin înalt
În acest caz:
map ($ x) [ f1 ,. . ., fn ] == [ f1 x,. . ., fn x ]
21
Quiz time!
Seria 23: https://questionpro.com/t/AT4qgZvALb
22
Selectarea elementelor dintr-o listă - filter
Exemplu - Selectarea elementelor pozitive dintr-o listă
Solut, ie recursivă
p o s i t i v e s : : [ I n t ] −> [ I n t ]
positives [ ] = []
p o s i t i v e s ( x : xs ) | x > 0 = x : p o s i t i v e s xs
| otherwise = p o s i t i v e s xs
Prelude > p o s i t i v e s [ 1 , − 2 , 3 ]
[1 ,3]
23
Exemplu - Selectarea cifrelor dintr-un s, ir de caractere
Solut, ie recursivă
d i g i t s : : [ Char ] −> [ Char ]
digits [] = []
d i g i t s ( x : xs ) | i s D i g i t x = x : d i g i t s xs
| otherwise = d i g i t s xs
24
Funct, ia filter
Solut, ie descriptivă
f i l t e r : : ( a −> Bool ) −> [ a ] −> [ a ]
f i l t e r p xs = [ x | x <− xs , p x ]
Solut, ie recursivă
f i l t e r : : ( a −> Bool ) −> [ a ] −> [ a ]
filter p [] = []
f i l t e r p ( x : xs ) | p x = x : f i l t e r p xs
| otherwise = f i l t e r p xs
25
Exemplu — Selectarea elementelor pozitive dintr-o listă
Solut, ie descriptivă
p o s i t i v e s : : [ I n t ] −> [ I n t ]
p o s i t i v e s xs = [ x | x <− xs , x > 0 ]
Solut, ie recursivă
p o s i t i v e s : : [ I n t ] −> [ I n t ]
positives [ ] = []
p o s i t i v e s ( x : xs ) | x > 0 = x : p o s i t i v e s xs
| otherwise = p o s i t i v e s xs
26
Exemplu — Selectarea cifrelor dintr-un s, ir de caractere
Solut, ie descriptivă
d i g i t s : : [ Char ] −> [ Char ]
d i g i t s xs = [ x | x <− xs , i s D i g i t x ]
Solut, ie recursivă
d i g i t s : : [ Char ] −> [ Char ]
digits [] = []
d i g i t s ( x : xs ) | i s D i g i t x = x : d i g i t s xs
| otherwise = d i g i t s xs
27
Quiz time!
Seria 23: https://questionpro.com/t/AT4qgZvALr
28
Pe săptămâna viitoare!
29