Difference between revisions of "Programare functionala"

From HaskellWiki
Jump to navigation Jump to search
m
Line 39: Line 39:
 
Hudak Paul, ''Conception, Evolution and, Application of Functional Programming Languages'' ACM Computing Surveys, vol 21, no 3 , Sept 1989 - disponibila in format [http://www.cs.berkeley.edu/~jcondit/pl-prelim/hudak89functional.pdf pdf].
 
Hudak Paul, ''Conception, Evolution and, Application of Functional Programming Languages'' ACM Computing Surveys, vol 21, no 3 , Sept 1989 - disponibila in format [http://www.cs.berkeley.edu/~jcondit/pl-prelim/hudak89functional.pdf pdf].
   
Hutton Graham, ''[http://www.cs.nott.ac.uk/~gmh/fold.pdf (link repactualizat) A tutorial on the universality and expressiveness of fold ]'' . J.F.P 1(1)-000 January 1993 - Cambridge Univ. Press
+
Hutton Graham, ''[http://www.cs.nott.ac.uk/~gmh/fold.pdf (link reactualizat) A tutorial on the universality and expressiveness of fold ]'' . J.F.P 1(1)-000 January 1993 - Cambridge Univ. Press
   
 
Hughes John ''Why Functional Programming Matters'' Comput. J. 32(2): 98-107 (1989) [http://www.cs.chalmers.se/~rjmh/Papers/whyfp.pdf download pdf ]
 
Hughes John ''Why Functional Programming Matters'' Comput. J. 32(2): 98-107 (1989) [http://www.cs.chalmers.se/~rjmh/Papers/whyfp.pdf download pdf ]

Revision as of 22:54, 30 June 2008


Programarea functionala (en. Functional programming - vedeti si in Enciclopedia Wikipedia )
sau
O viziune rezumat asupra lambda calculului. (Nota: link-urile rosii sunt pagini inca nescrise)


Un limbaj de programare are la baza functionarii sale un model de calcul. Altfel spus cand programam niste calcule intr-un limbaj de programare undeva, la susbsol :) niste valori sunt prinse intr-un joc al combinarii lor cu ajutorul unor operatii. Aceste operatii impreuna cu multimile de valori formeaza niste structuri algebrice (aici putem cita grupuri, corpuri, inele de numere intregi reale etc.) O caracteristica suplimentara a acestor calcule este ca ele se fac in ordinea aplicarii operatiilor.

Bun, dar prin ce este deosebita programarea functionala ? Raspunsul este: Foloseste un model de calcul, (care are o intreaga teorie dezvoltata despre el - e teoria lambda calculului) care nu se bazeaza pe o multime de numere ci pe o multime de functii (adesea anonime - se numesc abstractii ) scrise in asa-numita lambada notatie si pe operatii cu ele. Acestor formule (lambada expresii) li se mai spune si lambada-termi.

Ce calitati are aceasta multime de lambda termi ? - Poate manipula cu aceeasi usurinta si numere, valori logice, perechi, n-uple cat si functii. (De fapt manipuleaza numai functii dar un subset de functii se comporta izomorf cu multimea numerelor inzestrata cu operatii. Alt subset de functii se comporta izomorf cu multimea valorilor booleene inzestrata cu operatii logice. Alte lambda-expresii simuleaza functionarea n-uplelor. s.a.m.d) De fapt manipuleaza numai lambda expresii. In final noi insa putem obtine si folosi limbaje functionale (cum este Haskell) care ne dau acea senzatie a usurintei cu care exprima si manipuleaza si functii si n-uple si valori.

Cum putem scrie succesiuni de calcule ? Sunt ele succesiuni de expresii separate ca de obicei prin egal ? - Da. Se scriu asemenea succesiuni de calcule in lambda calcul. Au insa niste reguli speciale de a transforma o formula in alta: alfa-conversia, beta-conversia, eta-conversia. Daca simplificam formulele (regulile actionand numai intr-un singu sens, de la formula complicata la cea simpla - sa zicem ;) ) atunci regulile se numesc reduceri. (beta reducere, eta reducere). - Egalul este de fapt o echivalenta intre formule care pastreaza neschimbata functia asociata (semantica formulei - daca vreti). Calculele constau in succesiuni de alfa, beta si /sau eta conversii intre formule echivalente separate prin semnul egal. Asa cum egalitatea expresiilor aritmetice (in aritmetica intregilor de exemplu) pastreaza neafectata valoarea expresiei adusa pe rand la alte forme, la fel , in lambda calcul, echivalenta de formule (lambda termi) pastreaza neschimbata functia denotata de acestia. Dar demonstratia acestui fapt nu este triviala.

Cum sa ne imaginam universul lambda termilor ? - Ca un univers de notatii pentru functii. Cititi materiale despre sintaxa lambda expresiilor.


Bibliografie minimala


Gontineac Mihai, Programare Functionala O introducere utilizand limbajul Haskell - Ed. Alexandru Myller,Iasi a avut candva (pe dienai.ro) o serie de capitole.

Gordon Mike, Introduction to Functional Programming care ar trebui sa fie disponibila in format pdf [http://www.cl.cam.ac.uk/users/mjcg undeva pe aici - link extern] Sau incercati aici: Introduction-to-Functional-Programming

Hudak Paul, Conception, Evolution and, Application of Functional Programming Languages ACM Computing Surveys, vol 21, no 3 , Sept 1989 - disponibila in format pdf.

Hutton Graham, (link reactualizat) A tutorial on the universality and expressiveness of fold . J.F.P 1(1)-000 January 1993 - Cambridge Univ. Press

Hughes John Why Functional Programming Matters Comput. J. 32(2): 98-107 (1989) download pdf



Pagina indexata la indexul Categories:Ro


<= Inapoi la pagina principala Ro/Haskell.

<- Inapoi la inceputul paginii 'Intrebarile incepatorului Ro/Haskell'.