Upload
others
View
31
Download
0
Embed Size (px)
Citation preview
Programare declarativa1
Introducere în programarea funct,ionala folosind Haskell
Traian Florin S, erbanut,aIoana Leus, tean
Departamentul de Informatica, FMI, [email protected]
1bazat pe cursul Informatics 1: Functional Programming de la University of EdinburghTraian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 1 / 16
Programare declarativa vs. imperativa
Programare declarativa vs. imperativaCe vs. cum
Programare imperativa (Cum)
Explic mas, inii, pas cu pas, algoritmic, cum sa faca ceva s, i ca rezultat, seîntâmpla ce voiam sa se întâmple.
limbaje procedurale
limbaje de programare orientate pe obiecte
Programare declarativa (Ce)
Îi spun mas, inii ce vreau sa se întâmple s, i o las pe ea sa s, tie cum sarealizeze acest lucru. :-)
limbaje de interogare a bazelor de date
limbaje de programare logica
limbaje de programare funct,ionala
Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 2 / 16
Programare declarativa vs. imperativa
Programare declarativa vs. imperativaCe vs. cum
Programare imperativa (Cum)
Explic mas, inii, pas cu pas, algoritmic, cum sa faca ceva s, i ca rezultat, seîntâmpla ce voiam sa se întâmple.
limbaje procedurale
limbaje de programare orientate pe obiecte
Programare declarativa (Ce)
Îi spun mas, inii ce vreau sa se întâmple s, i o las pe ea sa s, tie cum sarealizeze acest lucru. :-)
limbaje de interogare a bazelor de date
limbaje de programare logica
limbaje de programare funct,ionala
Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 2 / 16
Programare declarativa vs. imperativa
Programare imperativa vs. declarativaDiferent,e
Modelul de computat,ie: algoritm vs. relat,ie
Ce exprima un program: cum vs. ce
Variabile/parametrii: atribuire distructiva vs. non-distructiva
Structuri de date: alterabile vs. explicite
Ordinea de execut,ie: efecte laterale vs. neimportanta
Expresii ca valori: nu vs. da
Controlul execut,iei: responsabilitatea programatorului vs a mas, inii
Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 3 / 16
Programare declarativa vs. imperativa
Agregarea datelor dintr-o colect, ie (JS)C. Boesch, Declarative vs Imperative Programming - Talk.JShttps://www.youtube.com/watch
Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 4 / 16
Programare declarativa vs. imperativa
Agregarea datelor dintr-o colect, ie (JS)C. Boesch, Declarative vs Imperative Programming - Talk.JShttps://www.youtube.com/watch
Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 5 / 16
Programare declarativa vs. imperativa
Programare funct, ionala în Haskell
Programarea funct,ionala e din ce în ce mai importanta în industrieHaskell e folosit în proiecte de Facebook, Google, Microsoft, . . .mai multe la https://wiki.haskell.org/Haskell_in_industry
Programare funct,ionala în limbajul vostru preferat de programare:
Java 8, C++x11, C#, Python, PHP, JavaScriptFunct, ii anonime (λ-abstract, ii)Funct, ii de procesare a fluxurilor de date: filter, map, reduce
De ce Haskell? (din cartea Real World Haskell)
Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 6 / 16
Programare declarativa vs. imperativa
Programare funct, ionala în Haskell
Programarea funct,ionala e din ce în ce mai importanta în industrieHaskell e folosit în proiecte de Facebook, Google, Microsoft, . . .mai multe la https://wiki.haskell.org/Haskell_in_industry
Programare funct,ionala în limbajul vostru preferat de programare:Java 8, C++x11, C#, Python, PHP, JavaScriptFunct, ii anonime (λ-abstract, ii)Funct, ii de procesare a fluxurilor de date: filter, map, reduce
De ce Haskell? (din cartea Real World Haskell)
The illustration on our cover is of a Hercules beetle. These beetles areamong the largest in the world. They are also, in proportion to their size, thestrongest animals on Earth, able to lift up to 850 times their own weight.Needless to say, we like the association with a creature that has such a highpower-to-weight ratio.
Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 6 / 16
Programare declarativa vs. imperativa
Programare funct, ionala în Haskell
Programarea funct,ionala e din ce în ce mai importanta în industrieHaskell e folosit în proiecte de Facebook, Google, Microsoft, . . .mai multe la https://wiki.haskell.org/Haskell_in_industry
Programare funct,ionala în limbajul vostru preferat de programare:
Java 8, C++x11, C#, Python, PHP, JavaScriptFunct, ii anonime (λ-abstract, ii)Funct, ii de procesare a fluxurilor de date: filter, map, reduce
De ce Haskell? (din cartea Real World Haskell)[It] is a deep language and [...] learning it is a hugely rewarding experience.
Nou Radical diferit de limbajele cu care suntem obis, nuit,i
Puternic Cod concis, rapid s, i sigur
Placut Tehnici elegante pentru rezolvarea de probleme concrete
Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 6 / 16
Programare declarativa vs. imperativa
Nou
Programarea funct,ionala
O cale profund diferita de a concepe ideea de software
În loc sa modificam datele existente, calculam valori noi din valorileexistente, folosind funct,ii
Funct,iile sunt pure: aceleas, i rezultate pentru aceleas, i intrari
Distinct,ie clara între part,ile pure s, i cele care comunica cu mediul extern
Haskell e lenes, : orice calcul e amânat cât de mult posibilSchimba modul de concepere al programelorPermite lucrul cu colect, ii potent, ial infinite de date precum [1..]
Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 7 / 16
Programare declarativa vs. imperativa
Puternic
Puritatea asigura consistent,a
O bucata de cod nu poate corupe datele altei bucat, i de cod.Mai us, or de testat decât codul care interact, ioneaza cu mediul
Evaluarea lenes, a poate fi exploatata pentru a reduce timpul de calculfara a denatura codul
f i r s t K k xs = take k ( sort xs )
Minimalism: mai put,in cod, în mai put,in timp, s, i cu mai put,ine defecte. . . rezolvând totus, i problema :-)
numbers = [1 ,2 ,3 ,4 ,5 ]t o t a l = f o l d l ( * ) 0 numbersdoubled = map ( * 2) numbers
Ofera suport pentru paralelism s, i concurent,a
Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 8 / 16
Programare declarativa vs. imperativa
Elegant
Idei abstracte din matematica devin instrumente puternice practicerecursivitate, compunerea de funct, ii, functori, monadefolosirea lor permite scrierea de cod compact s, i modular
Rigurozitate: ne fort,eaza sa gândim mai mult înainte, dar ne ajuta sascriem cod mai corect s, i mai curat
Curba de învat,are în treptePutem scrie programe mici destul de repedeExpertiza în Haskell necesita multa gândire s, i practicaDescoperirea unei lumi noi poate fi un drum distractiv s, i provocatorhttp://wiki.haskell.org/Humor
Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 9 / 16
Organizare
Plan curs
Partea I: Not,iuni de baza de programare funct,ionalaFunct, ii, recursie, funct, ii de ordin înalt, tipuriOperat, ii pe liste: filtrare, transformare, agregare
Partea II: Not,iuni avansate de programare funct,ionalaPolimorfism, clase de tipuri, modularizareTipuri de date algebrice - evaluarea expresiilorOperat, iuni Intrare/Ies, ire
Partea III: Capitole speciale de Haskell s, i programare funct,ionalaAgregare pe tipuri algebrice, monade, etc.
Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 10 / 16
Organizare
Resurse
Paginile cursului:http://moodle.fmi.unibuc.ro/course/view.php?id=367http://unibuc.ro/~ileustean/PD.html
Prezentarile cursurilor, forumuri, resurse electroniceS, tiri legate de curs vor fi postate pe ambele paginiNotele la teste vor fi postate tot pe Moodle
http://bit.do/progdecl
Cele mai noi variante ale cursurilor si laboratoarelor.
Cartea online „Learn You a Haskell for Great Good”http://learnyouahaskell.com/
Pagina Haskell http://haskell.orgHoogle https://www.haskell.org/hoogleHaskell Wiki http://wiki.haskell.org
Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 11 / 16
Organizare
Evaluare
Notare2 part,iale (par1, par2), examen (ex)
Nota finala: 1 (oficiu) + par1 + par2 + ex
Notele vor fi postate (doar) pe pagina Moodle a cursului.
Condit,ie de promovabilitate
Nota finala cel put,in 55 > 4.99
Activitate laboratorLa sugestia profesorului coordonator al laboratorului, se poate notaactivitatea în plus fat,a de cerint,ele obs, nuite
Maxim 1 punct (bonus la nota finala)
Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 12 / 16
Organizare
Part, ial 1
Valoreaza 4 puncte din nota finala
Sâmbata dintre a 6-a s, i a 7-a saptamâna (11 noiembrie)
Pe calculatoare
Durata: 1 ora
Acopera materia din Partea I — Not,iuni de baza
Cu acces la materiale descarcate pe calculator
Fara acces la ret,ea/internet
Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 13 / 16
Organizare
Part, ial 2
Valoreaza 3 puncte din nota finala
Sâmbata dinainte de vacant,a de iarna (16 decembrie)
Pe calculatoare
Durata: 1 ora
Materia din Partea II — Not,iuni avansate
Cu acces la materiale descarcate pe calculator
Fara acces la ret,ea/internet
Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 14 / 16
Organizare
Examen final
Valoreaza 2 puncte din nota finala
În sesiune
Pe hârtie
Materia: toata
Durata: 2 ore
Cu acces la materiale tiparite
Fara acces la ret,ea/internet
Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 15 / 16
Organizare
Observat, ii despre teste s, i notare
Nu este necesar sa dat,i toate testele pentru promovarepar1 = 6, 25 ∧ par2 = 5 =⇒ final = 5par1 = 10 =⇒ final = 5Dar este necesara nota agregata cel put, in 5
Pentru a lua nota finala 10 sunt necesare toate cele 3 testepar1 = 10 ∧ par2 = 10 ∧ lab = 10 =⇒ final = 9par1 = 10 ∧ par2 = 10 ∧ lab = 10 ∧ ex = 2, 50
=⇒ final = 9, 50 ≈ 10test1 = 9 ∧ test2 = 9 ∧ lab = 4 ∧ test3 = 9
=⇒ final = 9, 50 ≈ 10
Cursurile se bazeaza unele pe altele∀j < i. examenul i presupune construct, ii s, i concepte acoperite deexamenul j
Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 16 / 16