Personal tools

Programare functionala

From HaskellWiki

Revision as of 17:34, 29 October 2007 by Ha$kell (Talk | contribs)

Jump to: navigation, search

Programarea functionala (en. Functional programming)
sau
O viziune rezumat asupra lambda calculului.


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 denortata 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 lambada 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]

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

<= Inapoi la inceputul paginii principale Ro/Haskell