Personal tools

Programare functionala

From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
m (Adding a free course.)
(small fixes)
Line 10: Line 10:
   
 
<br>
 
<br>
  +
   
 
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 subsol'' :) 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.
 
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 subsol'' :) 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.
Line 36: Line 37:
 
1.[http://www.math.uaic.ro/~gonti/Cursuri/ProgramareFunctionala/ProgrFunct.pdf Nou e-book pe NET:] Gontineac Mihai, ''Programare Functionala'' O introducere utilizand limbajul Haskell - Ed. Alexandru Myller, Iasi a avut candva (pe dienai.ro) o serie de capitole. Acum (oct 2008) este gazduit [http://www.math.uaic.ro/~gonti/Cursuri/ProgramareFunctionala/ProgrFunct.pdf aici datorita domnului profesor Mihai Gontineac] , caruia ii multumim pe aceasta cale. (Atat lui cat si editorului de la Editura Alexandru Myller, Iasi.)
 
1.[http://www.math.uaic.ro/~gonti/Cursuri/ProgramareFunctionala/ProgrFunct.pdf Nou e-book pe NET:] Gontineac Mihai, ''Programare Functionala'' O introducere utilizand limbajul Haskell - Ed. Alexandru Myller, Iasi a avut candva (pe dienai.ro) o serie de capitole. Acum (oct 2008) este gazduit [http://www.math.uaic.ro/~gonti/Cursuri/ProgramareFunctionala/ProgrFunct.pdf aici datorita domnului profesor Mihai Gontineac] , caruia ii multumim pe aceasta cale. (Atat lui cat si editorului de la Editura Alexandru Myller, Iasi.)
   
2.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
+
2.Gordon Mike, ''Introduction to Functional Programming'' care ar trebui sa fie disponibila in format pdf:
- link extern] [http://www.haskell.org/sitewiki/images/2/2a/MikeGordon.pdf Ori pe Haskell.org - recomandat !] Sau incercati aici: [http://www.scribd.com/doc/221707/Introduction-to-Functional-Programming-Lambda-Calculus Introduction-to-Functional-Programming Pe site-ul Scribd]
+
*[http://www.cl.cam.ac.uk/users/mjcg undeva pe aici, link extern]
+
*[http://www.haskell.org/sitewiki/images/2/2a/MikeGordon.pdf Ori pe Haskell.org ,recomandat !]
O traducere a capitolului intai au incercat sa faca - si au reusit in limita conditiilor existente - Stefania Ifrim si Hedviga Hurjui, din anul III, Informatica, de la Univ. din Bacau. Sub rezerva unor corecturi care ar (putea) fi necesare v-o oferim aici la [http://www.haskell.org/sitewiki/images/a/a4/Capitolul_1_byMike_Gordon_translated_draft.pdf <Download> Traducere a capitolului 1]. Oferita "As it is".
+
*Sau incercati aici: [http://www.scribd.com/doc/221707/Introduction-to-Functional-Programming-Lambda-Calculus Introduction-to-Functional-Programming Pe site-ul Scribd]
  +
  +
O traducere a capitolului intai au incercat sa faca - si au reusit in limita conditiilor existente - Stefania Ifrim si Hedviga Hurjui, din anul III, Informatica, de la Univ. din Bacau. Sub rezerva unor corecturi care ar (putea) fi necesare v-o oferim aici:
  +
*la [http://www.haskell.org/sitewiki/images/a/a4/Capitolul_1_byMike_Gordon_translated_draft.pdf <Download> Traducere a capitolului 1]. Oferita "As it is".
   
   

Revision as of 07:22, 24 September 2009

Haskell -Programarea functională

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 subsol :) 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 calcului, vedeti Ce este lambda calculul ?) care nu se bazeaza pe o multime de numere ci pe o multime de functii (adesea anonime - se numesc abstractii ) scrise in asa-numita lambda notatie si pe operatii cu ele. Acestor formule (lambda expresii) li se mai spune si lambda-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, in ordine alfabetică


1.Nou e-book pe NET: Gontineac Mihai, Programare Functionala O introducere utilizand limbajul Haskell - Ed. Alexandru Myller, Iasi a avut candva (pe dienai.ro) o serie de capitole. Acum (oct 2008) este gazduit aici datorita domnului profesor Mihai Gontineac , caruia ii multumim pe aceasta cale. (Atat lui cat si editorului de la Editura Alexandru Myller, Iasi.)

2.Gordon Mike, Introduction to Functional Programming care ar trebui sa fie disponibila in format pdf:

O traducere a capitolului intai au incercat sa faca - si au reusit in limita conditiilor existente - Stefania Ifrim si Hedviga Hurjui, din anul III, Informatica, de la Univ. din Bacau. Sub rezerva unor corecturi care ar (putea) fi necesare v-o oferim aici:


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

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

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


Ordinea de studiu a bibliografiei:

3 (recomandata, prima, e o introducere) - EN

2 (cursul, partea principala dar nu suficienta pentru a trece examenul) - EN

4 (ultima parte, tehnici avansate de lucru cu fold-uri) -EN

1 (ACUM ar trebui s-o gasiti, este lectura complementara,) -RO *

5 (de citit ”Just for fun with Haskell”). - EN


Pagina indexata la indexul Categories:Ro


<= Inapoi la pagina principala Ro/Haskell.

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